@pcdesign

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

Вот такой списочек:
[
  {
    "id":"1",
    "qty":6
  },
  {
    "id":"2",
    "qty":1 
  },
  {
    "id":"1",
    "qty":1 
  },
  {
    "id":"2",
    "qty":1 
  },
  {
    "id":"3",
    "qty":10 
  },
  {
    "id":"1",
    "qty":1 
  }
]


Хотелось бы получить:

[
  {
    "id":"1",
    "qty":8
  },
  {
    "id":"2",
    "qty":2 
  },
  {
    "id":"3",
    "qty":10 
  },
]


То есть id стали уникальными и qty приплюсовались.
  • Вопрос задан
  • 385 просмотров
Решения вопроса 2
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вот решение попроще.
from collections import Counter
a = [{'id': '1', 'qty': 6}, {'id': '2', 'qty': 1}, {'id': '1', 'qty': 1}, {'id': '2', 'qty': 1}, {'id': '3', 'qty': 10}, {'id': '1', 'qty': 1}]
c = sum((Counter({d['id']: d['qty']}) for d in a), Counter())
result = [dict(id=k, qty=v) for k, v in c.items()]

UPD: Дополнил решение, чтобы строго соответствовать формату результата.
Ответ написан
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
a = <ваш списочек>

result = [{' id': z, 'qty': sum([y['qty'] for y in filter(lambda x: x[' id']==z, a)])} for z in sorted(set([x[' id'] for x in a]))]
print(result)


[{' id': '1', 'qty': 8}, {' id': '2', 'qty': 2}, {' id': '3', 'qty': 10}]

З.Ы. Просьба с уважением относиться к пользователям которые Вам хотят помочь. Когда просят привести Ваши попытки решения проблемы - это не из вредности, а в попытке понять Ваш ход мыслей в решении проблемы, если таковые имели место.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы