0

I have a list of tuples named lista and values in this list looks like:

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

Next I create defaultdict(list) where I store my tuple and I get:

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

To create this I wrote: //list

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

//dict

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

Now I want to sum up values for each key and get:

'A', 11110   

Does anobody know how to sum up this values?

cs95
  • 379,657
  • 97
  • 704
  • 746
Frendom
  • 508
  • 6
  • 24

2 Answers2

2

You can use defaultdict(int) instead of 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})

vurmux
  • 9,420
  • 3
  • 25
  • 45
2

You can use itemgetter and groupby as suggested here

If you want a list as an output

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)]

If you want a dictionary as an output

passed_dict = {k: sum(list(zip(*v))[1]) for k, v in groupby(lista, itemgetter(0))}
# {'A': 11110, 'B': 16136}
Sheldore
  • 37,862
  • 7
  • 57
  • 71