如何和所有的值在一个字典?

假设我有一个字典,其中键映射到像这样的整数:

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

是否有一种语法上最简洁的方法来返回__abc0中值的和。62在这种情况下?

485717 次浏览

如你所料:

sum(d.values())

当然有。这里有一种对字典的值求和的方法。

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

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

这本质上是Benjamin Peterson的six模块所做的。

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

你可以使用for循环来实现

我觉得sum(d.values())是得到和的最有效的方法。

你也可以尝试reduce函数和lambda表达式一起计算总和:

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

sum(d.values())

  • “d"→你的字典

Phihag的答案(以及类似的答案)在python3中不能工作。

对于python 3:

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

< p >更新! 有人抱怨它不管用!我只是从我的终端附上了一个截图。可能是版本不匹配等。

enter image description here

您可以获得字典中所有值的生成器,然后将其转换为一个列表,并使用sum()函数获得所有值的和。

例子:

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


sum(list(c.values()))

你可以考虑使用for loop:

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

总数= 800

使用sum()对字典中的值求和。

调用dict.values()返回字典dict的值。 使用sum(values)返回上一步值的和

d = {'key1':1,'key2':14,'key3':47}
values = d.values()
#Return values of a dictionary
total = sum(values)
print(total)

简单/荒谬的解决方案:

< a href = " https://trinket。Io /python/a8a1f25353" rel="nofollow noreferrer">https://trinket.io/python/a8a1f25353

d = {'key1': 1,'key2': 14,'key3': 47}
s = 0
for k in d:
s += d[k]


print(s)

或者如果你想让它更花哨:

< a href = " https://trinket。Io /python/5fcd379536" rel="nofollow noreferrer">https://trinket.io/python/5fcd379536

import functools


d = {'key1': 1,'key2': 14,'key3': 47}
s = functools.reduce(lambda acc,k: acc+d[k], d, 0)


print(s)