我有这样的嵌套字典:
data = {'A':4,'B':7, 'C':12, 'D':-15}
在我的情况下,我需要在2010年至2012年期间每年根据类似的密钥对所有值进行求和。 所以我预期的结果应该是这样的:
StringBuilder
答案 0 :(得分:4)
您可以使用collections.Counter()
(仅适用于正值!):
In [17]: from collections import Counter
In [18]: sum((Counter(d) for d in data.values()), Counter())
Out[18]: Counter({'C': 12, 'B': 7, 'A': 4, 'D': 3})
请注意,基于python文档Counter
仅适用于具有正值的用例:
multiset方法仅适用于具有正值的用例。输入可以是负数或零,但仅创建具有正值的输出。没有类型限制,但值类型需要支持加法,减法和比较。
elements()
方法需要整数计数。它忽略了零和负数。
因此,如果您想获得全面的结果,您可以手动进行求和。 collections.defaultdict()
是解决此问题的好方法:
In [28]: from collections import defaultdict
In [29]: d = defaultdict(int)
In [30]: for sub in data.values():
....: for i, j in sub.items():
....: d[i] += j
....:
In [31]: d
Out[31]: defaultdict(<class 'int'>, {'D': -15, 'A': 4, 'C': 12, 'B': 7})
答案 1 :(得分:1)
试试这个,
reduce(lambda x, y: dict((k, v + y[k]) for k, v in x.iteritems()), data.values())
<强>结果强>
{'A': 4, 'B': 7, 'C': 12, 'D': -15}