你可以使用字典。用viewitems for循環:
d1 = {'a': ('x', 'y'), 'b': ('k', 'l')}
d2 = {'a': ('m', 'n'), 'c': ('p', 'r')}
d3 = {}
for key, item in d1.viewitems() | d2.viewitems():
d3[key]= d3.get(key,()) + item
print(d3)
{'a': ('x', 'y', 'm', 'n'), 'c': ('p', 'r'), 'b': ('k', 'l')}
或者使用defaultdict:
from collections import defaultdict
d3 = defaultdict(tuple)
for key, item in d1.viewitems() | d2.viewitems():
d3[key] += item
print(d3)
或者使用viewkeys爲名單,因爲它們不是可哈希:
d1 = {'a': ['x', 'y'], 'b': ['k', 'l']}
d2 = {'a': ['m', 'n'], 'c': ['p', 'r']}
d3 = {}
for key in d1.viewkeys() | d2.viewkeys():
d3[key] = d1.get(key, []) + d2.get(key, [])
print(d3)
,你可以作爲一個寫字典comp:
d3 = {key:d1.get(key, []) + d2.get(key, []) for key in d1.viewkeys() | d2.viewkeys()}
for列出你也可以鏈中的物品:
d1 = {'a': ['x', 'y'], 'b': ['k', 'l']}
d2 = {'a': ['m', 'n'], 'c': ['p', 'r']}
from collections import defaultdict
d3 = defaultdict(list)
from itertools import chain
for key, v in chain.from_iterable((d1.items(),d2.items())):
d3[key] += v
print(d3)
defaultdict(<type 'list'>, {'a': ['x', 'y', 'm', 'n'], 'c': ['p', 'r'], 'b': ['k', 'l']})
對於python3只使用.items
和.keys
他們返回dictview對象。
可能的重複。這應該回答你的問題:http://stackoverflow.com/questions/38987/how-can-i-merge-two-python-dictionaries-in-a-single-expression – 2015-06-27 21:24:25
@gargas我不認爲這是重複的。您引用的問題是最後一個贏,而不是價值合併。 –