我有2个词典
dict1 = {'color': {'attri': ['Black']}, 'diameter': {'attri': ['(300, 600)']}}
dict2 = {'size': {'op':'in'}, 'diameter': {'op':'range'}, 'color': {'op':'in'}}
我希望将两个词典结合起来
dict3 = {'color': {'op': 'in', 'attri': ['Black']}, 'diameter': {'op': 'range', 'attri': ['(300,600)']}}
答案 0 :(得分:5)
此方法使用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'}}
虽然查看了您的预期输出,但如果键出现在两个词典中,您只需要一个结果,在这种情况下我会这样做:
for key in set(itertools.chain(dict1, dict2)):
if key in dict1 and key in dict2:
dict3[key] = {**dict1, **dict2}
答案 1 :(得分:3)
只需混合使用dict comprehensions
和dict 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}
答案 2 :(得分:2)
res = {}
for item in dict1:
res.setdefault(item, {})
res[item].update(dict1[item])
if item in dict2:
res[item].update(dict2[item])
答案 3 :(得分:-1)
对于字典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)