关于python:在大字典中汇总字典

Summing dictionaries in a large dictionary

在Python中,在一个大型字典中,什么是跨字典求和最有效的方法?

我找到了类似的帖子,但不是我想要的。例如,在列表中有一篇dict的文章:python:eleganticly merge dictionaries with sum()of values。也有其他的东西,但不完全适合听写。

示例代码为:

1
2
3
4
a={}
a["hello"]={'n': 1,'m': 2,'o': 3}
a["bye"]={'n': 2,'m': 1,'o': 0}
a["goodbye"]={'n': 0,'m': 2,'o': 1}

我需要的输出是:

1
{'n': 3,'m': 5,'o': 4}

求你了,救命!非常感谢!


使用collections.Counter

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> a = {}
>>> a["hello"]={'n': 1,'m': 2,'o': 3}
>>> a["bye"]={'n': 2,'m': 1,'o': 0}
>>> a["goodbye"]={'n': 0,'m': 2,'o': 1}
>>> import collections
>>> result = collections.Counter()
>>> for d in a.values():
...     result += collections.Counter(d)
...
>>> result
Counter({'m': 5, 'o': 4, 'n': 3})
>>> dict(result)
{'m': 5, 'o': 4, 'n': 3}

collections.Countersum一起使用(类似于您提供的链接中的答案):

1
2
3
>>> a = ...
>>> sum(map(collections.Counter, a.values()), collections.Counter())
Counter({'m': 5, 'o': 4, 'n': 3})


您可以使用collections.defaultdict

1
2
3
4
5
6
7
8
9
>>> a = {'bye': {'m': 1, 'o': 0, 'n': 2}, 'hello': {'m': 2, 'o': 3, 'n': 1}, 'goodbye': {'m': 2, 'o': 1, 'n': 0}}
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for v in a.values():                                              
...     for x, y in v.iteritems():                                              
...             d[x] += y
...
>>> print d
defaultdict(<type 'int'>, {'m': 5, 'o': 4, 'n': 3})