Суммирование значений в словаре, который хранит список кортежей - PullRequest
0 голосов
/ 23 мая 2019

У меня есть список кортежей с именем lista, и значения в этом списке выглядят так:

[('A', 1234),('A', 9876),('B',6574),('B',9562), etc]

Далее я создаю defaultdict (список), где храню свой кортеж, и получаю:

([('A', [1234, 9876]),('B',[6547.9562]), etc])

Для создания этого я написал: // список

lista = []
for w in data:
    if self.getAmountOfProceededInSpecificYear(w.status,w.year,w.district):
            lista.append(tuple((w.district,w.amount)))

// ДИКТ

passed_dict = defaultdict(list)
for k,v in lista:
    passed_dict[k].append(v)

Теперь я хочу суммировать значения для каждого ключа и получить:

'A', 11110   

Кто-нибудь знает, как суммировать эти значения?

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Вы можете использовать itemgetter и groupby в соответствии с предложением здесь

Если вы хотите список в качестве вывода

from itertools import groupby
from operator import itemgetter

lista = [('A', 1234),('A', 9876),('B',6574),('B',9562)]

passed_dict = [(k, sum(list(zip(*v))[1])) for k, v in groupby(lista, itemgetter(0))]
# [('A', 11110), ('B', 16136)]

Если вы хотите словарь в качестве вывода

passed_dict = {k: sum(list(zip(*v))[1]) for k, v in groupby(lista, itemgetter(0))}
# {'A': 11110, 'B': 16136}
2 голосов
/ 23 мая 2019

Вы можете использовать defaultdict(int) вместо defaultdict(list):

lista = [('A', 1234),('A', 9876),('B',6574),('B',9562)]
passed_dict = defaultdict(int)
for k,v in lista:
    passed_dict[k] += v
passed_dict

defaultdict(int, {'A': 11110, 'B': 16136})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...