- Как суммировать списки в словаре?
- Ответы (3 шт):
- Суммировать элементы словаря python
- # Table of Contents
- # Sum all values in a dictionary in Python
- # Sum all values in a dictionary using a for loop
- # Sum all values in a dictionary using reduce()
- # Sum the values in a list of dictionaries in Python
- # Sum the values in a list of dictionaries for All dictionary keys
- Как просуммировать значения в словаре?
- Решение
Как суммировать списки в словаре?
Есть словарь, в котором ключ — это номер месяца, и у этого ключа есть список, в котором значение температуры каждого дня месяца и так 12 раз.
k= for i in range(366): c,d=map(str, input().split()) ### Ввод в формате "dd.mm t" (t - это значение температуры, оно может быть как положительным, так и отрицательным, а также десятичным) c=int(c[3:5]) ### Мне не нужен день, мне нужен только месяц, поэтому я "отрезаю дни" d=float(d) k[c].append(d) ### В ключ номера месяца я записываю температуру d print(sum(k.values())) ### Суммирую значения всего словаря
Как итог: ошибка «TypeError: unsupported operand type(s) for +: ‘int’ and ‘list’ on line 9». Вопрос, как быть? Входные данные:
Как выглядит этот словарь:
Что должно показать при выполнении print(sum(k.values())) : 25.0 (складывается сумма всех элементов списков словаря). Но увы, появляется ошибка
Ответы (3 шт):
Так как значениями словаря у вас являются списки, то нужно сначала просуммировать значения каждого списка, а потом посчитать общую сумму.
d = < 1: [1,2,3], 2: [2,5,6] >values_sum = sum([sum(values_list) for values_list in d.values()]) print(values_sum) # Результат - 19
Пример подсчета в функциональном стиле:
d = < 1: [0], 2: [0], 3: [0], 4: [0], 5: [0, 10.0, 15.0, -3.0], 6: [0], 7: [0], 8: [0], 9: [0], 10: [0], 11: [0], 12: [0] >value = sum(map(sum, d.values())) print(value) # 22.0
Это может быть непонятным, поэтому опишу что происходит:
- 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 , задает не только значение но и тип начального значения. Таким образом это можно использовать:
d = print(sum(sum(d.values(), []))) # 22
Суммировать элементы словаря python
Last updated: Feb 19, 2023
Reading time · 5 min
# Table of Contents
# Sum all values in a dictionary in Python
Use the sum() function to sum all values in a dictionary.
The values() method on the dictionary will return a view of the dictionary’s values, which can directly be passed to the sum() function to get the sum.
Copied!my_dict = 'one': 1, 'two': 2, 'three': 3, > total = sum(my_dict.values()) print(total) # 👉️ 6 # 👇️ [1, 2, 3] print(list(my_dict.values()))
We used the sum() function to sum all values in a dictionary.
The dict.values method returns a new view of the dictionary’s values.
The sum function takes an iterable, sums its items from left to right and returns the total.
Copied!print(sum([1, 2, 3])) # 👉️ 6
The sum function takes the following 2 arguments:
Name | Description |
---|---|
iterable | the iterable whose items to sum |
start | sums the start value and the items of the iterable. sum defaults to 0 (optional) |
Notice that the value for the optional start argument defaults to 0 . This means that using this approach with an empty dictionary would return 0 .
Copied!my_dict = > total = sum(my_dict.values()) print(total) # 👉️ 0 # 👇️ [] print(list(my_dict.values()))
Alternatively, you can use a for loop.
# Sum all values in a dictionary using a for loop
This is a three-step process:
- Declare a new variable and initialize it to 0 .
- Use a for loop to iterate over the dictionary’s values.
- On each iteration, add the current dictionary value to the variable.
Copied!my_dict = 'one': 1, 'two': 2, 'three': 3, > total = 0 for value in my_dict.values(): total += value print(total) # 👉️ 6
We initialized the total variable to 0 and used the dict.values() method to get an iterator of the dictionary’s values.
On each iteration, we reassign the total variable to the result of adding the current value to it.
# Sum all values in a dictionary using reduce()
You can also sum all values in a dictionary using the reduce() function.
Copied!from functools import reduce my_dict = 'one': 1, 'two': 2, 'three': 3, > total = reduce( lambda acc, current: acc + current, my_dict.values() ) print(total) # 👉️ 6
Using the reduce() function is definitely not needed in this scenario as it is much more verbose than passing the view of the dictionary’s values directly to the sum() function.
The reduce function takes the following 3 parameters:
Name | Description |
---|---|
function | A function that takes 2 parameters — the accumulated value and a value from the iterable. |
iterable | Each element in the iterable will get passed as an argument to the function. |
initializer | An optional initializer value that is placed before the items of the iterable in the calculation. |
The lambda function in the example takes the accumulated value and the current value as parameters and returns the sum of the two.
If we provide a value for the initializer argument, it is placed before the items of the iterable in the calculation.
Copied!from functools import reduce my_dict = 'one': 1, 'two': 2, 'three': 3, > total = reduce( lambda acc, current: acc + current, my_dict.values(), 0 ) print(total) # 👉️ 6
In the example, we passed 0 for the initializer argument, so the value of the accumulator will be 0 on the first iteration.
The value of the accumulator would get set to the first element in the iterable if we didn’t pass a value for the initializer .
If the iterable is empty and the initializer is provided, the initializer is returned.
Copied!from functools import reduce my_dict = > total = reduce( lambda acc, current: acc + current, my_dict.values(), 0 ) print(total) # 👉️ 0
# Sum the values in a list of dictionaries in Python
To sum the values in a list of dictionaries:
- Use a generator expression to iterate over the list.
- On each iteration, access the current dictionary at the specific key.
- Pass the generator expression to the sum() function.
Copied!from collections import Counter # ✅ sum values in a list of dictionaries for specific dict key list_of_dicts = [ 'name': 'Alice', 'salary': 100>, 'name': 'Bob', 'salary': 100>, 'name': 'Carl', 'salary': 100>, ] total = sum(d['salary'] for d in list_of_dicts) print(total) # 👉️ 300
We used a generator expression to iterate over the list of dictionaries.
Generator expressions are used to perform some operation for every element or select a subset of elements that meet a condition.
On each iteration, we access the specific dict key to get the corresponding value and return the result.
The sum function takes an iterable, sums its items from left to right and returns the total.
The sum function takes the following 2 arguments:
Name | Description |
---|---|
iterable | the iterable whose items to sum |
start | sums the start value and the items of the iterable. sum defaults to 0 (optional) |
# Sum the values in a list of dictionaries for All dictionary keys
If you need to sum the values in a list of dictionaries for all dictionary keys, use the Counter class.
Copied!from collections import Counter list_of_dicts = [ 'id': 1, 'salary': 100>, 'id': 2, 'salary': 100>, 'id': 3, 'salary': 100>, ] my_dict = Counter() for d in list_of_dicts: for key, value in d.items(): my_dict[key] += value # 👇️ Counter() print(my_dict) total = sum(my_dict.values()) print(total) # 👉️ 306
The Counter class from the collections module is a subclass of the dict class.
The class is basically a mapping of key-count pairs.
Как просуммировать значения в словаре?
Пожалуйста, подскажите, как просуммировать значения voices. Подозреваю, что их нужно не аппендить, а сразу складывать, но не знаю как это сделать.
fin = open('input.txt') myDict = {} for line in fin: aspt, voices = line.split() if aspt not in myDict: myDict[aspt] = [] myDict[aspt].append(voices) print(myDict) for aspt in sorted(myDict): print(aspt, voices)
Как в словаре сравнить 2 значения?
Доброго утра всем! Возникла такая проблема. У меня есть словарь. Ключ этого словаря строка, а.
Как просуммировать значения в столбцах.
Проблема такая: имеются стобцы в таблице содержащие числовые значения и значения NULL. При.
Как вывести значения в словаре по ключу
Всем привет. Допустим есть словарь, где значением является экземпляр класса. Как вывести значения.
Как просуммировать значения одинаковых продуктов?
Добрый день, прошу помощи. Есть значения продаж определенных продуктов в различные дни. Каким.
Как просуммировать значения подстановочных полей?
Добрый день! Требуется помощь клуба знатоков! Пытаюсь сделать табель учета рабочего времени.
Сообщение было отмечено Escim0 как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
# Python3 код для демонстрации работы # Суммирование значения ключа в словаре # Использование sum () + понимание списка # Инициализировать список test_list = [{'gfg': 1, 'is': 2, 'best': 3}, {'gfg': 7, 'is': 3, 'best': 5}, {'gfg': 9, 'is': 8, 'best': 6}] # печать оригинального списка print("The original list is : " + str(test_list)) # Суммирование значения ключа в словаре # Использование sum () + понимание списка res = sum(sub['gfg'] for sub in test_list) # результат печати print("The sum of particular key is : " + str(res))