Python 基于键匹配合并词典的最快方法

Python 基于键匹配合并词典的最快方法,python,python-3.x,Python,Python 3.x,我有两本字典: 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} 我们只想保留唯一的键和与之关联

我有两本字典:

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}

我们只想保留唯一的键和与之关联的唯一值。最好的方法是什么这应该是你需要的。仅当键不在合并字典中时,它才会在所有字典中迭代添加键/值

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)
来自itertools导入链的

合并的_dic={}
对于链中的k,v(dic_1.items(),dic_2.items()):
如果k不在合并的dic中:
合并的dic[k]=v
打印(合并的dic)
# {'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
例如,如果您希望保留可以使用的键的所有值:

从集合导入defaultdict
来自itertools进口链
合并的dic=defaultdict(列表)
对于链中的k,v(dic_1.items(),dic_2.items()):
合并的dic[k]。追加(v)
打印(合并的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()):

样本数据不能准确解释SO。如果dic_2与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}

您真正想做的就是用
dic_1
中的任何值更新
dic_2
,这样您就可以

merged_dic = {**dic_2,**dic_1}

这将合并两个字典,从
dic_2
中获取所有值,用
dic_1
中存在的任何新值更新新字典中的任何键,然后在
dic_1

中添加任何唯一键,如果您希望第一个dict覆盖第二个dict中的键,则:

dic_2.update(dic_1)

您当前的实现是否存在特定的性能问题?我不理解这个问题,dic_1和合并的dic_有什么区别?这里合并了什么?您的输出与
dic_1
相同,因此合并字典会检查是否已经为某个键分配了值,例如,在dic_2中,“123456789”的值为5,但在dic_1中,相同数字的值为1,因此,当我们合并字典时,合并的字典将与字典1中分配的数字123456789中的任何值相匹配,可能的重复项您将希望复制
dic_1
,而不是使用
merged_d=dic_1
,因为对
dic_1
的任何更新也将更新
merged_d
(即,它们指向同一对象):)