Допустим, у меня есть словарь, в котором ключи отображаются на целые числа, такие как:
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).