辞書のすべての値を合計する方法は?


239

キーが次のような整数にマッピングされている辞書があるとします。

d = {'key1': 1,'key2': 14,'key3': 47}

内の値の合計を返すための構文的に最小限の方法があるd-すなわち62、この場合には?


2
ちょうど楽しみのために:実装sumの面で自分自身をreduce- reduce(例えば、より一般的な形でsumminそしてmax全ての面で書き込むことができますreduce)と、他の問題(例えば解決することができproduct、容易)。

1
グイドの発言はどうですか-私はこれを正しく覚えていると思います-その削減はなくなりますか?同感です。なぜそれを言語から削除するのですか?
タコグラブバス2012年

回答:


471

あなたが期待するように:

sum(d.values())

1
まあ、Python 2.7.12またうまく動作しますsum(d.values())
LancelotHolmes

7
@LancelotHolmesはい。ただし、メモリ内にリストが作成されるため、大規模な辞書の場合、リソースの制限により遅くなる可能性があります。したがって、この答えは「あなたが言うことがあり、」あなたの代わりに使用したい「しなければならないのPython 2.議論するときに使用」
phihag

いいね!そんなものがあると思っていたので、探してみました。とはいえ、
runlevel0

私はあなたのpythonを愛していれば、あなたは、Python 3を愛していれば、知らない、または実際のpython 2を参照している場合
ルーカス・バスケス

1
@LucasVazquezこれはPython 2(または1)を指します。最近は関係ないので削除しました。Python2で新しいコードを記述しても、を使用できますd.values()
phihag

70

Python 2ではitervalues()、ディクショナリのキーの反復子を返すディクショナリメソッドを使用して、すべての値の一時的なコピーを作成することを回避できます。

sum(d.itervalues())

Python 3ではd.values()、その方法がそのように変更された(そして、itervalues()不要になったため削除された)ため、そのまま使用できます。

常にディクショナリのキーの値を反復処理するバージョンに依存しないコードを簡単に作成するには、ユーティリティ関数が役立ちます。

import sys

def itervalues(d):
    return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())

sum(itervalues(d))

これは本質的にはベンジャミン・ピーターソンのsixモジュールが行うことです。


5
うん

15

確かにあります。これは、辞書の値を合計する方法です。

>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62

4
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)

あなたはforループを使ってそれを行うことができます


3

sum(d.values())合計を取得する最も効率的な方法だと思います。

ラムダ式とともに合計を計算するために、reduce関数を試すこともできます。

reduce(lambda x,y:x+y,d.values())


0

phihagの回答(および類似の回答)はpython3では機能しません。

Python 3の場合:

d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))

更新!動かないという不満があります!端末からスクリーンショットを添付するだけです。バージョンなどが一致していない可能性があります。

ここに画像の説明を入力してください


この方法を試しても同じ問題が発生します
jeevan kishore

それは私にとってはうまくいきます!答えをスクリーンショットで更新しました(ここではできません)。バージョンと関係があるかもしれません...
Reza

0

このための「forループ」を検討できます。

  d = {'data': 100, 'data2': 200, 'data3': 500}
  total = 0
  for i in d.values():
        total += i

合計= 800


1
または、単にsum(d.values()).values()返しますList
リニー

ええ、それはまた別の方法です。
Rahul Patel

-1

辞書内のすべての値のジェネレータを取得し、それをリストにキャストして、sum()関数を使用してすべての値の合計を取得できます。

例:

c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}

sum(list(c.values()))

1
それが機能しない場合、これはどのように答えますか?他の回答に対するコメントのように見えます。
MartinThøgersen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.