2011-02-02 51 views
129

比方說,我在該鍵映射到整數像一本字典:如何彙總字典中的所有值?

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

是否有返回d -i.e.值之和的語法簡約的方式62在這種情況下?

+2

只是爲了好玩:根據[`reduce`]實現`sum``(http://docs.python.org/library/functions.html) - `reduce`是一個更一般的形式(例如` sum`,`min`和`max`都可以用`reduce`來表示),並且可以很容易地解決其他問題(例如`product`)。 – 2011-02-02 23:53:38

+1

Guido的說法呢 - 我想我正確地記得 - 減少會消失嗎?我和你在一起。爲什麼要從語言中刪除它? – octopusgrabbus 2012-06-16 19:04:46

回答

253

正如你所期望:

sum(d.values()) 

在Python < 3,您可能需要使用itervalues代替(不建立一個臨時的列表)。

+0

好吧,`Python 2.7.12`也適用於'sum(d.values())` – LancelotHolmes 2017-01-17 01:14:04

11

當然有。這是總結字典值的一種方法。

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

在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模塊一樣。