python中所有嵌套字典的值之和

时间:2013-03-11 23:42:54

标签: python dictionary

我有一个计数器字典,例如:

from collections import Counter, defaultdict

numbers = defaultdict(Counter)

numbers['a']['first'] = 1
numbers['a']['second'] = 2
numbers['b']['first'] = 3

我想得到总和:1 + 2 + 3 = 6

在python 3中执行此操作的最简单/惯用方法是什么?

3 个答案:

答案 0 :(得分:7)

使用嵌套理解:

sum(x for counter in numbers.values() for x in counter.values())

或者首先计算计数器(从空的开始),然后是它们的值:

sum(sum(numbers.values(), Counter()).values())

或者首先是每个计数器的值,然后是中间结果:

sum(sum(c.values()) for c in numbers.values())

或使用链:

from itertools import chain
sum(chain.from_iterable(d.values() for d in numbers.values()))

我更喜欢第一种方式。

答案 1 :(得分:2)

sum(sum(c.values()) for c in numbers.values())

答案 2 :(得分:1)

from itertools import chain
sum(chain.from_iterable(d.values() for d in numbers.values()))
# outputs: 6

在python 2.x中的性能使用.itervalues()方面,这避免了构建中间列表(适用于此处的所有解决方案)。

sum(chain.from_iterable(d.itervalues() for d in numbers.itervalues()))