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

3

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

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个回答

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()))

我更喜欢第一种方法。

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

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()))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接