首页 > 解决方案 > 基于键匹配合并字典的最快方法

问题描述

我有两个字典:

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}

我们只想保留唯一的键和与它们相关联的唯一值。最好的方法是什么

标签: pythonpython-3.x

解决方案


这应该是你需要的。只有当键不在合并字典中时,它才会遍历所有添加键/值的字典。

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()):

推荐阅读