Как сложить все значения в словаре? - PullRequest
187 голосов
/ 03 февраля 2011

Допустим, у меня есть словарь, в котором ключи отображаются на целые числа, например:

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

Существует ли синтаксически минималистичный способ возврата суммы значений в d, т.е. 62 в этом случае?

Ответы [ 6 ]

365 голосов
/ 03 февраля 2011

Как и следовало ожидать:

sum(d.values())

В Python <3 вы можете использовать <code>itervalues вместо этого (что не создает временный список).

66 голосов
/ 03 февраля 2011

В Python 2 вы можете избежать создания временной копии всех значений, используя метод itervalues() dictionary, который возвращает итератор ключей словаря:

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 Бенджамина Петерсона.

12 голосов
/ 03 февраля 2011

Конечно, есть.Вот способ суммировать значения словаря.

>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62
3 голосов
/ 12 июля 2018
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)

Вы можете сделать это, используя цикл for

2 голосов
/ 08 января 2019

Мне кажется, sum(d.values()) - самый эффективный способ получить сумму.

Вы также можете попробовать функцию Reduce для вычисления суммы вместе с лямбда-выражением:

reduce(lambda x,y:x+y,d.values())
1 голос
/ 08 марта 2019

сумма (d.values ​​()) - "d" -> переменная вашего словаря

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...