在Python中合并2个词典而不删除第一个词典

时间:2013-11-29 05:32:00

标签: python dictionary

我如何合并dict1和dict2以便获得res? 最好使用.update()

dict1 = {'a':[1, 2, 3], 'b':[4, 5, 6]}
dict2 = {'a':[100, 101, 103], 'b':[104, 105, 106]}
res = {'a':[1, 2, 3, 100, 101, 103], 'b':[4, 5, 6, 104, 105, 106]}

4 个答案:

答案 0 :(得分:3)

如果dicts具有相同的键:

>>> {k: v + dict2.get(k, []) for k, v in dict1.iteritems()}
{'a': [1, 2, 3, 100, 101, 103], 'b': [4, 5, 6, 104, 105, 106]}

如果不是:

>>> from itertools import chain
>>> res = {}
>>> for k, v in chain(dict1.iteritems(), dict2.iteritems()):
...     res[k] = res.get(k, []) + v
... 
>>> res
{'a': [1, 2, 3, 100, 101, 103], 'b': [4, 5, 6, 104, 105, 106]}

您可以在此解决方案中使用collections.defaultdict

>>> from collections import defaultdict
>>> res = defaultdict(list)
>>> for k, v in chain(dict1.iteritems(), dict2.iteritems()):
...     res[k] += v
... 
>>> dict(res)
{'a': [1, 2, 3, 100, 101, 103], 'b': [4, 5, 6, 104, 105, 106]}

答案 1 :(得分:1)

dict1 = {'a':[1, 2, 3], 'b':[4, 5, 6]}
dict2 = {'a':[100, 101, 103], 'b':[104, 105, 106]}
def combine(D1, D2):
    D = collections.defaultdict(list)
    for k, v in D1.items():
        D[k] += v
        D[k] += D2[k]
    return D

答案 2 :(得分:1)

如果词典具有相同的键,我认为这是最简单的解决方案:

res = {k : dict1[k]+dict2[k] for k in dict1}

如果词典有不同的键,但你只关心相同的键:

res = {k : dict1[k]+dict2[k] for k in set(dict1) & set(dict2)}

否则,另一个答案就行了!

答案 3 :(得分:0)

这假设dict1和dict2具有相同的键

res = {}
for i in dict1.keys()
    res[i] = dict1[i] + dict2[i]

这样的东西应该可以工作,我没有运行代码所以它可能是错的但是这个想法应该是正确的。