在Python中合并2个字典,但保留值

在Python中合并2个字典,但保留值,python,list,dictionary,Python,List,Dictionary,这可能是重复的。 我有两本这种格式的词典: dict1={'id1':'11', 'id2':'12', 'key11':'value11', 'key12':'value12'} dict2={'id1':'n/a', 'id2':'12', 'key21':'value21', 'key22':'value22'} 请注意,这两个词典之间唯一通用的键是id2。所以我希望我的最后一句话是这样的: dict3={'id1':'11', 'id2':'12', 'key11':'value11

这可能是重复的。 我有两本这种格式的词典:

dict1={'id1':'11', 'id2':'12', 'key11':'value11', 'key12':'value12'}

dict2={'id1':'n/a', 'id2':'12', 'key21':'value21', 'key22':'value22'}
请注意,这两个词典之间唯一通用的
键是
id2
。所以我希望我的最后一句话是这样的:

dict3={'id1':'11', 'id2':'12', 'key11':'value11', 'key12':'value12', 'key21':'value21', 'key22':'value22'} 
dict1={'id1':'11', 'id2':'12', 'key11':'value11', 'key12':'value12'}
dict2={'id1':'n/a', 'id2':'somevalue', 'key21':'value21', 'key22':'value22'}
另外,请注意,在
2nd
字典上
id1缺失
,但在最终输出中,
dict3
使用了
dict1
中的值,因为从
id2
我们知道它是同一个字典

最后,如果dict2没有与dict1匹配的键,如下所示:

dict3={'id1':'11', 'id2':'12', 'key11':'value11', 'key12':'value12', 'key21':'value21', 'key22':'value22'} 
dict1={'id1':'11', 'id2':'12', 'key11':'value11', 'key12':'value12'}
dict2={'id1':'n/a', 'id2':'somevalue', 'key21':'value21', 'key22':'value22'}
然后可以使用dict1键将dict3设置为dict2,但值设置为
'n/a'
??像这样:

dict3={'id1':'n/a', 'id2':'somevalue', 'key21':'value21', 'key22':'value22', 'id2':'n/a', 'key11':'n/a', 'key12':'n/a'}
为此,我遍历了两个字典列表。到目前为止,我的代码是:

for d1 in dlist1:
    for d2 in dlist2:
        if d1['id1']==d2['id1']:
            if d1['id2'] == 'n/a':
                d1['id2'] = d2['id2']
            d1['key21'] = d2['key21']    
            # adding the new key-value pairs to dictionary 1, one-by-one and so on ...
简而言之,我要么向
dlist1
中的一个节点添加新字段,要么向
dlist1
中添加一个全新的节点。
我的问题是:有没有一种更快的pythonic方法可以做到这一点?因为我的实现给了我
KeyError的

如果dict2没有与dict1匹配的键,你的意思是什么?在第二个示例中,两个词典都有多个公用键?@kasramvd它们有公用键,但这些键的值不同。这意味着dict2与dict1不匹配。为了使这两个dict匹配并合并,必须确保
id1或id2或两个
键值对在两个字典上相同@BPL的可能重复项不完全重复,因为它不处理将留空的字段。