给定三个命令d1,d2和d3:

d1

{'a':1,'b':2,'c':3, 'd':0)


2天

{'b':76}


3天

{'a': 45, 'c':0}


多个字典共有一些键名(实际上,它们代表相同的现实对象)。其他诸如d1中的“ d”仅存在于d2中。我想将所有字典分组在一起,首先首先求和公用键的值,最后得到:

{'a':46, 'b':78, 'c':3, 'd': 0}


如果每个dict大小相同且包含相同的键,则可以执行以下操作:

summedAndCombined = {}
    for k,v in d1.items():
        summedAndCombined[k] = d1[k]+d2[k]+d3[k]


但这会在到达d1中的键(而不是其他键)时分解。我们如何实现这一目标?

更新

不能重复。 collections.Counter几乎可以工作,但是如果键d的值为零(高于该值),则结果Counter中缺少键d。

In [128]: d1 = {'a':1,'b':2,'c':3, 'd':0}

In [129]: d2 = {'b':76}

In [130]: d3 = {'a': 45, 'c':0}

In [131]: from collections import Counter

In [132]: Counter(d1) + Counter(d2) + Counter(d3)
Out[132]: Counter({'b': 78, 'a': 46, 'c': 3})

最佳答案

如果希望0键持续存在,可以使用update代替+Counter

>>> c = Counter()
>>> for d in d1, d2, d3:
...     c.update(d)
...
>>> c
Counter({'b': 78, 'a': 46, 'c': 3, 'd': 0})


(这可能是一个dup,但是我现在找不到。)

关于python - 如何在Python中组合多个字典,求和公共(public)键的值(并保留值为0的键)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31226379/

10-11 22:49
查看更多