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)
您需要做的就是修改append
它extend
,然后添加列表的元素,而不是添加列表本身。有关和之间的区别的更多详细信息,请参阅list
文档。append
extend
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)