我有两个字典:
dic_1={'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
dic_2={'1234567890': 5, '1234567891': 6}
现在,我想基于键值对其进行合并,以使合并后的字典如下所示:
merged_dic=={'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
我们只想保留唯一键,并且只保留一个与它们关联的不同值。最好的方法是什么
答案 0 :(得分:1)
这应该是您所需要的。仅当键不在合并字典中时,才迭代所有添加键/值的字典。
from itertools import chain
merged_dic = {}
for k, v in chain(dic_1.items(), dic_2.items()):
if k not in merged_dic:
merged_dic[k] = v
print(merged_dic)
# {'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
例如,如果您要保留可以使用的键的所有值:
from collections import defaultdict
from itertools import chain
merged_dic = defaultdict(list)
for k, v in chain(dic_1.items(), dic_2.items()):
merged_dic[k].append(v)
print(merged_dic)
# {'1234567890': [1, 5], '1234567891': [2, 6], '1234567880': [3], '1234567881': [4]}
使用chain()
可以使您迭代许多词典。在问题中,您显示了2个字典,但是如果您有4个字典,则可以轻松地将它们全部合并。例如
for k, v in chain(dic_1.items(), dic_2.items(), dic_3.items(), dic_4.items()):
答案 1 :(得分:0)
样本数据不能完全解释SO。如果dic_2与dic_1具有公用密钥,则将该项目保留在dic_1中;否则,将其保留在dic_1中。如果在dic_2中找到了新项目,则将其放入合并字典中。
import copy
dic_1={'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
dic_2={'1234567890': 5, '8234567890': 6}
merged_d = copy.copy(dic_1)
diff = set(dic_2)-set(dic_1)
merged_d.update({k: dic_2[k] for k in diff})
print(merged_d)
结果:
{'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4, '8234567890': 6}
答案 2 :(得分:0)
您真正想做的就是用dic_2
中的任何值更新dic_1
,以便您可以做
merged_dic = {**dic_2,**dic_1}
这将合并两个字典,从dic_2
获取所有值,用dic_1
中存在的任何新值更新新字典中的任何键,然后在{{1 }}
答案 3 :(得分:0)
如果您希望第一个字典覆盖第二个字典中的键,则:
dic_2.update(dic_1)