Суммирование списка значений с подобными ключами к словарю - PullRequest
0 голосов
/ 15 марта 2012

Как мне взять список значений (в процентах):

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

и вернуть словарь:

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

и пересчитать, разделив на сумму (example_dict.values ​​()) / 100:

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

Методы, которые я пытался сопоставить со списком значений в словаре, приводят к тому, что значения итерируются, а не суммируются.


Редактировать: Так как это было задано, вот несколько попыток (после простой записи старых значений), которые никуда не делись и демонстрируют мою «новизну» с помощью python:

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

неверно

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)

снова недействительно.

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

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Вы можете попробовать что-то вроде этого:

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

Посмотрите, как работает онлайн: ideone

0 голосов
/ 15 марта 2012

Используйте класс Counter:

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()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...