Let’s say I have a dictionary in which the keys map to integers like:
d = {'key1': 1,'key2': 14,'key3': 47}
Is there a syntactically minimalistic way to return the sum of the values in d
—i.e. 62
in this case?
martineau
118k25 gold badges164 silver badges294 bronze badges
asked Feb 2, 2011 at 23:01
2
As you’d expect:
sum(d.values())
answered Feb 2, 2011 at 23:02
phihagphihag
276k72 gold badges451 silver badges468 bronze badges
5
In Python 2 you can avoid making a temporary copy of all the values by using the itervalues()
dictionary method, which returns an iterator of the dictionary’s keys:
sum(d.itervalues())
In Python 3 you can just use d.values()
because that method was changed to do that (and itervalues()
was removed since it was no longer needed).
To make it easier to write version independent code which always iterates over the values of the dictionary’s keys, a utility function can be helpful:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
This is essentially what Benjamin Peterson’s six
module does.
answered Feb 2, 2011 at 23:18
martineaumartineau
118k25 gold badges164 silver badges294 bronze badges
1
Sure there is. Here is a way to sum the values of a dictionary.
>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62
answered Feb 2, 2011 at 23:04
vz0vz0
32.2k7 gold badges43 silver badges77 bronze badges
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)
you can do it using the for loop
answered Jul 12, 2018 at 15:59
sum(d.values())
- “d” -> Your dictionary Variable
answered Mar 8, 2019 at 8:35
Behlul ValiyevBehlul Valiyev
1011 gold badge2 silver badges5 bronze badges
I feel sum(d.values())
is the most efficient way to get the sum.
You can also try the reduce function to calculate the sum along with a lambda expression:
reduce(lambda x,y:x+y,d.values())
Nick
137k22 gold badges57 silver badges95 bronze badges
answered Jan 8, 2019 at 5:12
0
USE sum() TO SUM THE VALUES IN A DICTIONARY.
Call dict.values() to return the values of a dictionary dict.
Use sum(values) to return the sum of the values from the previous step.
d = {'key1':1,'key2':14,'key3':47}
values = d.values()
#Return values of a dictionary
total = sum(values)
print(total)
answered Dec 24, 2020 at 4:11
phihag’s answer (and similar ones) won’t work in python3.
For python 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Update!
There are complains that it doesn’t work! I just attach a screenshot from my terminal. Could be some mismatch in versions etc.
answered Dec 13, 2019 at 10:17
RezaReza
1471 silver badge7 bronze badges
2
You could consider ‘for loop’ for this:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
total = 800
answered Apr 9, 2020 at 3:51
2
simplest/silliest solution:
https://trinket.io/python/a8a1f25353
d = {'key1': 1,'key2': 14,'key3': 47}
s = 0
for k in d:
s += d[k]
print(s)
or if you want it fancier:
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)
answered May 12, 2021 at 11:54
nemonemo
12.1k3 gold badges21 silver badges25 bronze badges
You can get a generator of all the values in the dictionary, then cast it to a list and use the sum() function to get the sum of all the values.
Example:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
zganger
3,5721 gold badge9 silver badges13 bronze badges
answered Mar 1, 2020 at 14:06
2
В этом посте мы обсудим, как вычислить сумму всех значений словаря в Python.
1. Использование sum()
функция
Простое решение — использовать встроенную функцию sum()
для вычисления суммы всех значений словаря. Идея состоит в том, чтобы получить представление о значениях словаря, используя dict.values()
функцию и передать ее sum()
.
if __name__ == ‘__main__’: d = {‘A’: 1, ‘B’: 2, ‘C’: 3} total = sum(d.values()) print(total) # 6 |
Скачать Выполнить код
Вы также можете добиться этого с помощью понимания списка.
if __name__ == ‘__main__’: d = {‘A’: 1, ‘B’: 2, ‘C’: 3} total = sum(d[x] for x in d) print(total) # 6 |
Скачать Выполнить код
Для значений словаря с плавающей запятой рассмотрите возможность использования math.fsum()
чтобы получить сумму с повышенной точностью.
2. Использование операции уменьшения
В качестве альтернативы вы можете использовать functools.reduce()
функция для вычисления суммы значений словаря с лямбда-выражением. Ниже приведен простой пример, демонстрирующий использование этого:
from functools import reduce if __name__ == ‘__main__’: d = {‘A’: 1, ‘B’: 2, ‘C’: 3} total = reduce(lambda x, y:x+y, d.values()) print(total) # 6 |
Скачать Выполнить код
Это все о вычислении суммы всех значений словаря в Python.
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
I have got pretty simple list:
example_list = [
{'points': 400, 'gold': 2480},
{'points': 100, 'gold': 610},
{'points': 100, 'gold': 620},
{'points': 100, 'gold': 620}
]
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):
total_gold = 0
for item in example_list:
total_gold += example_list["gold"]
asked Jul 27, 2012 at 17:21
Mateusz JagiełłoMateusz Jagiełło
6,79411 gold badges39 silver badges46 bronze badges
3
sum(item['gold'] for item in myList)
answered Jul 27, 2012 at 17:22
g.d.d.cg.d.d.c
46.5k9 gold badges99 silver badges111 bronze badges
0
If you’re memory conscious:
sum(item['gold'] for item in example_list)
If you’re extremely time conscious:
sum([item['gold'] for item in example_list])
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.
answered Jul 27, 2012 at 19:16
Ben BurnsBen Burns
14.9k4 gold badges35 silver badges56 bronze badges
2
If you prefer map
, this works too:
import operator
total_gold = sum(map(operator.itemgetter('gold'),example_list))
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
.
answered Jul 27, 2012 at 17:23
mgilsonmgilson
297k64 gold badges625 silver badges690 bronze badges
3
from collections import Counter
from functools import reduce
from operator import add
sum_dict = reduce(add, (map(Counter, example_list)))
# Counter({'points': 700, 'gold': 4330})
total_gold = sum_dict['gold']
Bruno Mello
4,3881 gold badge7 silver badges39 bronze badges
answered Feb 24, 2022 at 0:58
xmduhanxmduhan
94712 silver badges14 bronze badges
1
example_list = [
{'points': 400, 'gold': 2480},
{'points': 100, 'gold': 610},
{'points': 100, 'gold': 620},
{'points': 100, 'gold': 620}
]
result = np.sum([x['gold'] for x in example_list])
print(result)
output
4330
answered Feb 25, 2022 at 12:07
Golden LionGolden Lion
3,7452 gold badges25 silver badges35 bronze badges
1
29.12.2019Python, Программы Python
Имея словарь на Python, напишите программу на Python, чтобы найти сумму всех элементов в словаре.
Примеры:
Input : {'a': 100, 'b':200, 'c':300} Output : 600 Input : {'x': 25, 'y':18, 'z':45} Output : 88
- Подход № 1. Использование встроенной функции
sum()
Используйте функцию суммы, чтобы найти сумму значений словаря.
def
returnSum(myDict):
sum
=
0
for
i
in
myDict:
sum
=
sum
+
myDict[i]
return
sum
dict
=
{
'a'
:
100
,
'b'
:
200
,
'c'
:
300
}
print
(
"Sum :"
, returnSum(
dict
))
Выход:
Sum : 600
- Подход № 2. Использование цикла For для перебора значений с использованием функции
values()
Перебирайте каждое значение словаря с помощью функции
values()
и продолжайте добавлять его к сумме.def
returnSum(
dict
):
sum
=
0
for
i
in
dict
.values():
sum
=
sum
+
i
return
sum
dict
=
{
'a'
:
100
,
'b'
:
200
,
'c'
:
300
}
print
(
"Sum :"
, returnSum(
dict
))
Выход:
Sum : 600
- Подход № 3. Использование цикла For для итераций по элементам словаря.
Перебирайте каждый элемент словаря и просто продолжайте добавлять значения в переменную суммы.
def
returnSum(
dict
):
sum
=
0
for
i
in
myDict:
sum
=
sum
+
dict
[i]
return
sum
dict
=
{
'a'
:
100
,
'b'
:
200
,
'c'
:
300
}
print
(
"Sum :"
, returnSum(
dict
))
Выход:
Sum : 600
Рекомендуемые посты:
- Python | Получить первые K предметов в словаре
- Методы словаря в Python | Установите 1 (cmp (), len (), items () …)
- Словарь Python | items () метод
- Python | Преобразование типов элементов словаря
- Python | Сортировать элементы в алфавитном порядке из данного словаря
- Python — частота неравных элементов в словаре
- Python | Удалить элементы из словаря во время итерации
- Python | Получить элементы в отсортированном порядке из данного словаря
- Python | Подсчитать количество элементов в словарном значении, которое является списком
- Программа Python, чтобы найти второе максимальное значение в словаре
- Программа Python, чтобы найти самые высокие 3 значения в словаре
- Python программа для создания словаря из строки
- Программа Python для обмена ключами и значениями в словаре
- Python | Найти ближайший ключ в словаре
- Python | Найти глубину словаря
Программа Python, чтобы найти сумму всех элементов в словаре
0.00 (0%) 0 votes
Как сложить все значения в словаре?
Допустим, у меня есть словарь, в котором ключи отображаются на целые числа, такие как:
d = {'key1': 1,'key2': 14,'key3': 47}
Есть ли синтаксически минималистичный способ вернуть сумму значений в d
-ie 62
в этом случае?
2011-02-02 23:01
11
ответов
Решение
Как и следовало ожидать:
sum(d.values())
В Python<3, вы можете использовать itervalues
вместо этого (который не создает временный список).
user35070
02 фев ’11 в 23:02
2011-02-02 23:02
2011-02-02 23:02
В 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
модуль делает.
2011-02-02 23:18
Конечно, есть. Вот способ суммировать значения словаря.
>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62
2011-02-02 23:04
d = {'key1': 1,'key2': 14,'key3': 47}
sum1 = sum(d[item] for item in d)
print(sum1)
Вы можете сделать это с помощью цикла for
2018-07-12 15:59
sum(d.values ()) – “d” -> Ваш словарь Переменная
2019-03-08 08:35
Я чувствую sum(d.values())
это самый эффективный способ получить сумму.
Вы также можете попробовать функцию Reduce для вычисления суммы вместе с лямбда-выражением:
reduce(lambda x,y:x+y,d.values())
2019-01-08 05:12
ИСПОЛЬЗУЙТЕ 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)
2020-12-24 07:11
Ответ phihag (и аналогичные) не будет работать в python3.
Для Python 3:
d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))
Обновить! Есть жалобы, что не работает! Просто прикрепляю скриншот со своего терминала. Возможно несоответствие версий и т. Д.
2019-12-13 13:17
Вы можете использовать для этого цикл for:
d = {'data': 100, 'data2': 200, 'data3': 500}
total = 0
for i in d.values():
total += i
всего = 800
2020-04-09 06:51
Вы можете получить генератор всех значений в словаре, затем преобразовать его в список и использовать функцию sum() для получения суммы всех значений.
Пример:
c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}
sum(list(c.values()))
2020-03-01 17:06