Программа складывающая значения в списке словарей
Есть некий список словарей:
spis_dict = [
{'item':'item1','amount':400},
{'item':'item2','amount':300},
{'item':'item1','amount':750}
]
Как сложить значения и вывести, например:
Counter({'item1':1150,'item2':300})
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
spis_dict = [
{'item': 'item1', 'amount': 400},
{'item': 'item2', 'amount': 300},
{'item': 'item1', 'amount': 750}
]
rez = {}
for it in spis_dict:
item = it['item']
amount = it['amount']
r = rez.get(item)
if r is None:
rez[item] = amount
else:
rez[item] += amount
print(f'rez = {rez}\n')
Автор решения: Sergey
→ Ссылка
Существует более элегантное решение:
spis_dict = [
{'item': 'item1', 'amount': 400},
{'item': 'item2', 'amount': 300},
{'item': 'item3', 'amount': 100},
{'item': 'item1', 'amount': 750},
{'item': 'item2', 'amount': 50},
{'item': 'item2', 'amount': 65}
]
rez = {}
for it in spis_dict:
item = it['item']
amount = it['amount']
rez[item] = rez.setdefault(item, 0) + amount
print(f'rez = {rez}\n')
Здесь используется метод setdefault(), который делает то же самое, что и метод get() но если нужный элемент пока не существует в словаре, то он создаёт этот элемент с заданным ключом и значением по умолчанию.
В данном случае, в качестве значения по умолчанию используется первоначальная сумма равная нулю. А если элемент существует, то плюсум к нему.