Zanam Zanam - 2 years ago 87
Python Question

Python: summarizing data from list using index from another list

I have two lists:

L1 = ['A','B','A','C','A']
L2 = [1, 4, 6, 1, 3]

I want to create a dictionary which has the following output:

DictOutSum = {'A':10, 'B':4, 'C':1}
DictOutCount = {'A':3, 'B':1, 'C':1}

i.e. Lists L1 and L2 both have same number of elements and the elements in them corresponds one to one. I want to find sum of all numbers in L2 for each unique element in L1 and make a dictionary out of it(DictOutSum). I also want to create another dictionary which stores the counts of number of unique elements of L1(DictOutCount).

I don't even have an idea where to start for this other than to use a for loop.

wim wim
Answer Source

Pure python implementation:

>>> dict_sum = dict.fromkeys(L1, 0)
>>> dict_count = dict.fromkeys(L1, 0)
>>> for k,n in zip(L1, L2):
...    dict_sum[k] += n
...    dict_count[k] += 1
>>> dict_sum
{'A': 10, 'B': 4, 'C': 1}
>>> dict_count
{'A': 3, 'B': 1, 'C': 1}

Fancy one-liner implementations:

>>> from collections import Counter
>>> Counter(L1)  # dict_count
Counter({'A': 3, 'B': 1, 'C': 1})
>>> sum((Counter({k:v}) for k,v in zip(L1, L2)), Counter())  # dict_sum
Counter({'A': 10, 'B': 4, 'C': 1})
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download