@Yarior_rus

Как найти сумму элементов словаря вложенного в список?

Дан словарь, вложенный в список
lst = [
	{
		1: 11,
		2: 12,
		3: 13,
	},
	{
		1: 21,
		2: 22,
		3: 23,
	},
	{
		1: 24,
		2: 25,
		3: 26,
	},
]


Пробовал вставить сюда код от другой задачи.

summ = 0
for key1 in lst:
    for key2 in lst[key1]:
        summ += lst[key1][key2]

print("Сумма элементов:", summ)


Но он выдаёт ошибку:
Traceback (most recent call last):
for key2 in lst[key1]:
TypeError: list indices must be integers or slices, not dict


Потому что код для просто словарей, не вложенных в списки.

Как написать, или модифицировать имеющийся код чтобы вычислял сумму вложенного в список словаря?
  • Вопрос задан
  • 133 просмотра
Решения вопроса 3
AmanitaRubescens
@AmanitaRubescens
Шалтай-болтай
Бабушкин способ:

lst = [
	{
		1: 11,
		2: 12,
		3: 13,
	},
	{
		1: 21,
		2: 22,
		3: 23,
	},
	{
		1: 24,
		2: 25,
		3: 26,
	},
]
add_lst = []

for i in lst:
    add_lst.append(sum(i.values()))

print(sum(add_lst))
Ответ написан
Комментировать
Ответ написан
Комментировать
@Tetris2703
Machine Learning Engineer
Через перебор словарей
total_sum = 0

# Проходим по каждому словарю в списке
for dict_ in lst:
    # Проходим по каждому значению в словаре
    for value in dict_.values():
        total_sum += value

print("Сумма элементов:", total_sum)


Можно так как вариант сделать
for key in dict_:
        total_sum += dict_[key]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@q2digger
никого не трогаю, починяю примус
print(sum([sum(i.values()) for i in lst]))
Ответ написан
@aidar420
sum([sum(lst_element.values()) for lst_element in lst])

поэтапно:
[lst_element for lst_element in lst] выведет
[{1: 11, 2: 12, 3: 13}, {1: 21, 2: 22, 3: 23}, {1: 24, 2: 25, 3: 26}]
(список всех элементов списка lst)
У словарей есть методы: values() выводит список значений словаря, keys() - ключей, items() - список кортежей пар ключ-значение.
поэтому применяем values(), получаем список списков:
[lst_element.values() for lst_element in lst]
[([11, 12, 13]),
 ([21, 22, 23]),
([24, 25, 26])]
(на самом деле там чуть другой тип данных, но для простоты норм)
дальше суммируем элементы в списках внутри списка
[sum(lst_element.values()) for lst_element in lst]
[36, 66, 75]
и суммируем значения этого списка
sum([sum(lst_element.values()) for lst_element in lst])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы