Как посчитать сумму значений в словаре в python
Перейти к содержимому

Как посчитать сумму значений в словаре в python

  • автор:

Как сложить все значения в словаре?

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

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

7 ответов

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

Sum (d.values ()) — «d» -> Ваш словарь Переменная

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

Я чувствую, что sum(d.values()) — самый эффективный способ получить сумму.

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

Ответ phihag (и аналогичные) не будет работать в python3.

Для Python 3:

Обновить! Есть жалобы, что это не работает! Я просто прикрепляю скриншот из моего терминала. Может быть некоторое несоответствие в версиях и т. Д.

enter image description here

Вы можете сделать это с помощью цикла for

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

В Python 3 вы можете просто использовать d.values() , потому что этот метод был изменен для этого (и itervalues() был удален, поскольку он больше не нужен).

Чтобы упростить написание независимого от версии кода, который всегда перебирает значения ключей словаря, может быть полезна служебная функция:

Как суммировать списки в словаре?

Есть словарь, в котором ключ — это номер месяца, и у этого ключа есть список, в котором значение температуры каждого дня месяца и так 12 раз.

Как итог: ошибка «TypeError: unsupported operand type(s) for +: ‘int’ and ‘list’ on line 9». Вопрос, как быть? Входные данные:

Как выглядит этот словарь:

Что должно показать при выполнении print(sum(k.values())) : 25.0 (складывается сумма всех элементов списков словаря). Но увы, появляется ошибка

Ответы (3 шт):

Так как значениями словаря у вас являются списки, то нужно сначала просуммировать значения каждого списка, а потом посчитать общую сумму.

Пример подсчета в функциональном стиле:

Это может быть непонятным, поэтому опишу что происходит:

d.values() возвращает список значений словаря, т.е. список списков: [[0], [0], [0], [0], [0, 10.0, 15.0, -3.0], [0], [0], [0], [0], [0], [0], [0]]

map(sum, d.values()) применяет функцию sum к каждому элементу списка и сохраняет результат: [0, 0, 0, 0, 22.0, 0, 0, 0, 0, 0, 0, 0]

А sum(map(sum, d.values())) суммирует итоговый список сумм

По умолчанию функция sum суммирует к числу 0, полная форма выглядит так sum(iterable [, start]) . Параметр start , по умолчанию 0 , задает не только значение но и тип начального значения. Таким образом это можно использовать:

Python — sum values in dictionary

How can I sum all gold values? I’m looking for nice oneliner.

Now I’m using this code (but it’s not the best solution):

5 Answers 5

g.d.d.c's user avatar

If you’re memory conscious:

If you’re extremely time conscious:

In most cases just use the generator expression, as the performance increase is only noticeable on a very large dataset/very hot code path.

See this answer for an explanation of why you should avoid using map.

See this answer for some real-world timing comparisons of list comprehension vs generator expressions.

If you prefer map , this works too:

But I think the generator posted by g.d.d.c is significantly better. This answer is really just to point out the existence of operator.itemgetter .

mgilson's user avatar

30 seconds after he did. I originally deleted it, but ever since I got the stupid moderator tools, I can still see my deleted answer. It was bugging me, so I thought to myself, there has to be another somewhat clean way to do this that illustrates something useful . I probably should just delete it though . I don't know. (I'm open to suggestions).

Как сложить словари в которых числа?

Изучаю тему «Словари» и попалась задача на сложение словарей, у меня есть словарь состоящий из 3х ключей + 3 значения:

Необходимо вывести на консоль общий рост семьи как сумму ростов всех членов.

При этом нужно, чтобы общий рост вывелся в формате:
Общий рост моей семьи — ХХ см.

Сложение провести получилось:

Теперь вопрос заключается в том, как вывести это число в нужном мне формате, не просто числом, а:
Общий рост моей семьи — ХХ см.

  • Вопрос задан 15 авг. 2022
  • 258 просмотров

Простой 7 комментариев

  • Facebook
  • Вконтакте
  • Twitter

Fockker

Fockker

Fockker

Ну вот весь код, видимо я сам начал путаться уже да

Fockker

ну это читинг.
вы приводите не сумму значений в трех исходных словарях, а сумму значений в каком-то левом словаре, которого не было в задании
на месте преподавателя я бы не зачел

при том что просто получить сумму трех переменных — ну это я не знаю, в первом классе проходят? или во втором?

danila763

dict.values() возвращает список значений словаря:

надо только их где-то сложить

  • Facebook
  • Вконтакте
  • Twitter

Но теперь мне нужно записать число которое вышло в значении:
Общий рост моей семьи — ХХ см.
Я не пойму как это сделать, даже не знаю как загуглить :С

danila763

Руслан, Сначала я подумал, что я отстал в развитие и не понимал, почему вы просто не можете вывести значение на экран.

Но потом понял, вы подошли к изучению языка совершенно не серьёзно и даже не умеете выводить сообщение в консоль.

Fockker

См. про форматирование строк в питоне, форматированный вывод в питоне и про f-строки f-strings

  • Facebook
  • Вконтакте
  • Twitter

Fockker

%s на практике работает и с числами, и с десятичной запятой.
мне хватает, а если нужно форматирование чисел, то тогда нужно уже свом плейсхолдеры использовать %f, %d

Тип Значение
‘d’, ‘i’, ‘u’ Десятичное число.
‘o’ Число в восьмеричной системе счисления.
‘x’ Число в шестнадцатеричной системе счисления (буквы в нижнем регистре).
‘X’ Число в шестнадцатеричной системе счисления (буквы в верхнем регистре).
‘e’ Число с плавающей точкой с экспонентой (экспонента в нижнем регистре).
‘E’ Число с плавающей точкой с экспонентой (экспонента в верхнем регистре).
‘f’, ‘F’ Число с плавающей точкой (обычный формат).
‘g’ Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
‘G’ Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
‘c’ Символ (строка из одного символа или число — код символа).
‘s’ Строка.

Fockker

У вас задача на сложение переменных, которые являются элементами разных словарей.
А не на скоростное гугление по запросу «как сложить элементы в одном словаре».
Чтобы сложить три переменные, не нужно создавать новый словарь. Надо просто сложить три переменные и вывести результат.

Это всё очень плохо.
Программы, которые мы пишем, должны выдавать правильный результат при любых вводных.
А ваша будет всегда будет выдавать 514, либо её надо будет каждый раз переписывать под новые данные.
Потому что она считает не то что было задано, а какой-то левый массив, который не имеет никакой связи с исходными данными.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *