用另一个字典中的值替换字典中值列表中的元素
Replace element from a list of values in a dictionnary by values from other dictionnary
我真的很抱歉,当你有项目要做的时候,在 python 做一个菜鸟是相当困难的......这是我的问题
d= { 'a': [ '"123728"', '"102359"', '"110663"', '"110664"','"110665"', '"110666"', '"110667"', '"110668"', '"110669"', '"110670"', '"110671"', '"110672"', '"115663"', '"115664"', '"115665"', '"122330"', '"122351"', '"110673"', '"120433"', '"121831"'],
'b': ['"100016"', '"101424"', '"101948"', '"102832"', '"108834"', '"110397"', '"110622"', '"110679"', '"110680"', '"110681"', '"110682"', '"116693"', '"123331"', '"102359"', '"110683"', '"115666"', '"115667"', '"124098"', '"125243"', '"140965"', '"121002"']}
字典d中的值是d1中的键
d1= {'"110674"': '"Apple"', '"110682"': "Banana", '"123331"': "Melon", '"110397"': "Orange"} # correspondance
我想要的是将d中的值替换为d1中对应的值,删除不对应的
d3= { 'a': "", 'b': ["Banana", "Melon", "Orange"]}
这是我的代码
for key, value in d.items():
for key2, value2 in d1.items():
for elem in value:
print(key2)
if elem == key2:
full_dict[key] = value2
pprint.pprint(full_dict)
但是我得到了这个结果
defaultdict(None, {'b': 'Orange'})
非常感谢
使用以下 dict comprehension:
d3 = { key : [d1[v] for v in value if v in d1] for key, value in d.items() }
print(d3)
输出
{'a': [], 'b': ['Orange', 'Banana', 'Melon']}
以上相当于下面的for循环:
d3 = {}
for key, value in d.items():
d3[key] = [d1[v] for v in value if v in d1]
如果你想匹配精确的输出(即一个空字符串代替一个空列表),使用:
d3 = {}
for key, value in d.items():
res = [d1[v] for v in value if v in d1]
d3[key] = res if res else ""
print(d3)
输出
{'a': '', 'b': ['Orange', 'Banana', 'Melon']}
有关 Python 中循环技术的一般介绍,请参阅 documentation。
你可以迭代d
字典,然后对于每个键,迭代字典d1
并检查第二个字典的键是否存在于第一个字典的值中,然后将其添加到最后的结果字典。
result = {}
for k,v in d.items():
temp = []
for key,val in d1.items():
if key in v:
temp.append(val)
result[k] = temp if temp else ''
result
{'a': '', 'b': ['Banana', 'Melon', 'Orange']}
PS: 您的预期输出与给定数据不匹配,Apple
不应该存在。
我真的很抱歉,当你有项目要做的时候,在 python 做一个菜鸟是相当困难的......这是我的问题
d= { 'a': [ '"123728"', '"102359"', '"110663"', '"110664"','"110665"', '"110666"', '"110667"', '"110668"', '"110669"', '"110670"', '"110671"', '"110672"', '"115663"', '"115664"', '"115665"', '"122330"', '"122351"', '"110673"', '"120433"', '"121831"'],
'b': ['"100016"', '"101424"', '"101948"', '"102832"', '"108834"', '"110397"', '"110622"', '"110679"', '"110680"', '"110681"', '"110682"', '"116693"', '"123331"', '"102359"', '"110683"', '"115666"', '"115667"', '"124098"', '"125243"', '"140965"', '"121002"']}
字典d中的值是d1中的键
d1= {'"110674"': '"Apple"', '"110682"': "Banana", '"123331"': "Melon", '"110397"': "Orange"} # correspondance
我想要的是将d中的值替换为d1中对应的值,删除不对应的
d3= { 'a': "", 'b': ["Banana", "Melon", "Orange"]}
这是我的代码
for key, value in d.items():
for key2, value2 in d1.items():
for elem in value:
print(key2)
if elem == key2:
full_dict[key] = value2
pprint.pprint(full_dict)
但是我得到了这个结果
defaultdict(None, {'b': 'Orange'})
非常感谢
使用以下 dict comprehension:
d3 = { key : [d1[v] for v in value if v in d1] for key, value in d.items() }
print(d3)
输出
{'a': [], 'b': ['Orange', 'Banana', 'Melon']}
以上相当于下面的for循环:
d3 = {}
for key, value in d.items():
d3[key] = [d1[v] for v in value if v in d1]
如果你想匹配精确的输出(即一个空字符串代替一个空列表),使用:
d3 = {}
for key, value in d.items():
res = [d1[v] for v in value if v in d1]
d3[key] = res if res else ""
print(d3)
输出
{'a': '', 'b': ['Orange', 'Banana', 'Melon']}
有关 Python 中循环技术的一般介绍,请参阅 documentation。
你可以迭代d
字典,然后对于每个键,迭代字典d1
并检查第二个字典的键是否存在于第一个字典的值中,然后将其添加到最后的结果字典。
result = {}
for k,v in d.items():
temp = []
for key,val in d1.items():
if key in v:
temp.append(val)
result[k] = temp if temp else ''
result
{'a': '', 'b': ['Banana', 'Melon', 'Orange']}
PS: 您的预期输出与给定数据不匹配,Apple
不应该存在。