如何在python中组合字典

Aak*_*tel 2 python django

我有2本词典

dict1 = {'color': {'attri': ['Black']}, 'diameter': {'attri': ['(300, 600)']}}

dict2 = {'size': {'op':'in'}, 'diameter': {'op':'range'}, 'color': {'op':'in'}}
Run Code Online (Sandbox Code Playgroud)

我想结合这两个词典

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

Meg*_*Ing 5

只需混合使用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}
Run Code Online (Sandbox Code Playgroud)


FHT*_*ell 5

defaultdict即使密钥只出现在其中一个字典中,此方法也使用a 并且是安全的.

import itertools
import collections

dict3 = collections.defaultdict(dict)

for key, value in itertools.chain(dict1.items(), dict2.items()):
     dict3[key].update(value)
Run Code Online (Sandbox Code Playgroud)

证明 - 适用于:

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

输出dict(dict3)是:

{'color': {'attri': ['Black'], 'op': 'in'},
'diameter': {'attri': ['(300, 600)'], 'op': 'range'},
'size': {'op': 'in'}}
Run Code Online (Sandbox Code Playgroud)

虽然查看了您的预期输出,但如果密钥出现在两个字典中,您只需要一个结果,在这种情况下,我会这样做:

for key in set(itertools.chain(dict1, dict2)):
    if key in dict1 and key in dict2:
         dict3[key] = {**dict1, **dict2}
Run Code Online (Sandbox Code Playgroud)