将每个python字典值除以总值

时间:2015-06-21 12:39:06

标签: python dictionary

我有     a = {'foo': 2, 'bar': 3, 'baz': 5 }

无论如何,我可以在一行中获得a = {'foo': 0.2, 'bar': 0.3, 'baz': 0.5 }吗?需要将每个值除以总值...我只是不能完成它... :(

非常感谢你!

3 个答案:

答案 0 :(得分:24)

对值求和,然后使用字典理解来生成具有标准化值的新字典:

total = sum(a.itervalues(), 0.0)
a = {k: v / total for k, v in a.iteritems()}

你可以把它挤成一个单行,但它不会那么可读:

a = {k: v / total for total in (sum(a.itervalues(), 0.0),) for k, v in a.iteritems()}

我为sum()提供了一个浮点起始值,以防止/运算符在Python 2中使用地板划分,如果totalv同时存在是整数。

在Python 3中,删除iter*前缀:

a = {k: v / total for total in (sum(a.values()),) for k, v in a.items()}

请注意,您 想要在此使用{k: v / sum(a.values()) for k, v in a.items()};为理解循环中的每次迭代执行值表达式,一次又一次地重新计算sum()sum()遍历字典中的所有N个项目,因此您最终得到二次O(N ^ 2)解决方案,而不是问题的O(N)解决方案。

答案 1 :(得分:1)

def div_d(my_dict):

    sum_p = sum(my_dict.values())

    for i in my_dict:
        my_dict[i] = float(my_dict[i]/sum_p)

    return my_dict 

p.s我对编程很陌生,但这是我能想到的最好的。

答案 2 :(得分:0)

我是使用函数

完成的
a = {'foo': 2, 'bar': 3, 'baz': 5}  
def func1(my_diction):  
    total = 0  
    for i in my_diction:  
        total = total + my_diction[i]  
    for j in my_diction:  
        my_diction[j] = (float)(my_diction[j])/total  
    return my_diction     

print (func1(a))