在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的可能重复项不完全重复,因为它不处理将留空的字段。