私はカウンターの辞書を持っています、例えば:
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でこれを行う最も簡単な/慣用的な方法は何ですか?
私はカウンターの辞書を持っています、例えば:
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でこれを行う最も簡単な/慣用的な方法は何ですか?
ネストされた内包表記を使用します。
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()))
私は最初の方法を好みます。
sum(sum(c.values()) for c in numbers.values())
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()))