如何在python中组合字典



我有2个字典

dict1 = {'color': {'attri': ['Black']}, 'diameter': {'attri': ['(300, 600)']}}
dict2 = {'size': {'op':'in'}, 'diameter': {'op':'range'}, 'color': {'op':'in'}}

我想合并 2 个词典,以便

dict3 = {'color': {'op': 'in', 'attri': ['Black']}, 'diameter': {'op': 'range', 'attri': ['(300,600)']}}

此方法使用defaultdict,即使密钥仅出现在其中一个字典中也是安全的。

import itertools
import collections
dict3 = collections.defaultdict(dict)
for key, value in itertools.chain(dict1.items(), dict2.items()):
dict3[key].update(value)

证明 -- 适用于:

dict1 = {'color': {'attri':['Black']}, 'diameter': {'attri':['(300, 600)']}}
dict2 = {'size': {'op':'in'}, 'diameter': {'op':'range'}, 'color': {'op':'in'}}

dict(dict3)的输出为:

{'color': {'attri': ['Black'], 'op': 'in'},
'diameter': {'attri': ['(300, 600)'], 'op': 'range'},
'size': {'op': 'in'}}

虽然查看您的预期输出,但您只希望在键出现在两个词典中时才想要结果,在这种情况下,我会这样做:

dict3 = {key: {**dict1[key], **dict2[key]} 
for key in dict1.keys() & dict2.keys()}

只需混合使用dict comprehensionsdict unpacking

dict1 = {'color': {'attri':['Black']}, 'diameter': {'attri':['(300, 600)']}}
dict2 = {'size': {'op':'in'}, 'diameter': {'op':'range'}, 'color': {'op':'in'}}
dict3 = {n:{**dict1[n],**dict2[n]} for n in dict1}
res = {}
for item in dict1:
res.setdefault(item, {})
res[item].update(dict1[item])
if item in dict2:
res[item].update(dict2[item])

对于字典 x 和 y,z 成为具有来自 y 和 x 的值的合并字典。

在 Python 3.5 或更高版本中,:

z = {**x, **y}

在 Python 2(或 3.4 或更低版本(中,编写一个函数:

def merge_two_dicts(x, y):
z = x.copy()   # start with x's keys and values
z.update(y)    # modifies z with y's keys and values & returns None
return z
and
z = merge_two_dicts(x, y)

最新更新