汇总具有与字典类似的键的值列表

时间:2012-03-15 16:21:46

标签: python list dictionary

如何获取值列表(百分比):

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

并返回字典:

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

并通过除以sum(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 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

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

答案 1 :(得分:0)

使用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()}