将2个词典与共同键组合在一起

Hyp*_*nja 8 python dictionary python-2.7

我有两个词典,需要将类似键的值组合在一起.这是一个例子:

dict1 = {'key1':[value11,value12,value13] , 'key2':[value21,value22,value23]}
dict2 = {'key1':[value14,value15] , 'key2':[value24,value25]}
Run Code Online (Sandbox Code Playgroud)

我用了 :

dict3 = {}
for key in (dict1.viewkeys() | dict2.keys()):
    if key in dict1: dict3.setdefault(key, []).append(dict1[key])
    if key in dict2: dict3.setdefault(key, []).append(dict2[key])
Run Code Online (Sandbox Code Playgroud)

这给了我:

dict3 = {'key1':[[value11,value12,value13],[value14,value15]] , 'key2':[[value21,value22,value23],[value24,value25]]}
Run Code Online (Sandbox Code Playgroud)

我想要的是一个简单的:

期望的输出:

 dict3 = {'key1':[value11,value12,value13,value14,value15] , 'key2':[value21,value22,value23,value24,value25]}
Run Code Online (Sandbox Code Playgroud)

Ffi*_*ydd 3

您需要做的就是修改appendextend,然后添加列表的元素,而不是添加列表本身。有关和之间的区别的更多详细信息,请参阅list文档appendextend

dict1 = {'key1':['value11','value12','value13'] , 'key2':['value21','value22','value23']}
dict2 = {'key1':['value14','value15'] , 'key2':['value24','value25']}

dict3 = {}
for key in set().union(dict1, dict2):
    if key in dict1: dict3.setdefault(key, []).extend(dict1[key])
    if key in dict2: dict3.setdefault(key, []).extend(dict2[key])

print(dict3)
# {'key2': ['value21', 'value22', 'value23', 'value24', 'value25'], 'key1': ['value11', 'value12', 'value13', 'value14', 'value15']}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用collections.defaultdict默认设置为的a list,如下所示。

from collections import defaultdict
dict3 = defaultdict(list)

for key in set().union(dict1, dict2):
  for dic in [dict1, dict2]:
    if key in dic:
      dict3[key] += dic[key]
Run Code Online (Sandbox Code Playgroud)