David__
David__

Reputation: 375

Summing List of values with similar keys to dictionary

How can I take a list of values (percentages):

example = [(1,100), (1,50), (2,50), (1,100), (3,100), (2,50), (3,50)]

and return a dictionary:

example_dict = {1:250, 2:100, 3:150}

and recalculate by dividing by sum(example_dict.values())/100:

final_dict = {1:50, 2:20, 3:30}  

The methods I have tried for mapping the list of values to a dictionary results in values being iterated over rather than summed.


Edit: Since it was asked here are some attempts (after just writing over old values) that went no where and demonstrate my 'noviceness' with python:

{k: +=v if k==w[x][0] for x in range(0,len(w),1)}

invalid

for i in w[x][0] in range(0,len(w),1):
    for item in r:
        +=v  (don't where I was going on that one)

invalid again.

another similar one that was invalid, nothing on google, then to SO.

Upvotes: 0

Views: 424

Answers (2)

Mark Byers
Mark Byers

Reputation: 839154

You could try something like this:

total = float(sum(v for k,v in example))
example_dict = {}
for k,v in example:
     example_dict[k] = example_dict.get(k, 0) + v * 100 / total

See it working online: ideone

Upvotes: 2

Karl Knechtel
Karl Knechtel

Reputation: 61643

Use the Counter class:

from collections import Counter
totals = Counter()
for k, v in example: totals.update({k:v})
total = sum(totals.values())
final_dict = {k: 100 * v // total for k, v in totals.items()}

Upvotes: 0

Related Questions