Допустим, у меня есть словарь, в котором ключи отображаются на целые числа, такие как:
d = {'key1': 1,'key2': 14,'key3': 47}
Есть ли синтаксически минималистичный способ вернуть сумму значений в d
-ie 62
в этом случае?
Допустим, у меня есть словарь, в котором ключи отображаются на целые числа, такие как:
d = {'key1': 1,'key2': 14,'key3': 47}
Есть ли синтаксически минималистичный способ вернуть сумму значений в d
-ie 62
в этом случае?
Ответы:
Как и следовало ожидать:
sum(d.values())
Python 2.7.12
также хорошо работает сsum(d.values())
d.values()
.
В 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
делает модуль Бенджамина Петерсона .
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)
Вы можете сделать это с помощью цикла for
Я считаю, sum(d.values())
что это самый эффективный способ получить сумму.
Вы также можете попробовать функцию Reduce для вычисления суммы вместе с лямбда-выражением:
reduce(lambda x,y:x+y,d.values())
sum (d.values ()) - "d" -> Ваш словарь Переменная
Ответ phihag (и аналогичные) не будет работать в python3.
Для питона 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Обновить! Есть жалобы, что это не работает! Я просто прикрепляю скриншот из моего терминала. Может быть некоторое несоответствие в версиях и т. Д.
Вы можете рассмотреть 'для цикла' для этого:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
всего = 800
sum(d.values())
, так как .values()
возвращает List
.
Вы можете получить генератор всех значений в словаре, затем преобразовать его в список и использовать функцию sum (), чтобы получить сумму всех значений.
Пример:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
sum
себя в терминахreduce
-reduce
это более общая форма (напримерsum
,min
иmax
все можно написать в терминахreduce
) и может легко решить другие проблемы (напримерproduct
).