Yan*_*May 14 python dictionary
我有
a = {'foo': 2, 'bar': 3, 'baz': 5 }
无论如何我可以进入a = {'foo': 0.2, 'bar': 0.3, 'baz': 0.5 }一条线?需要将每个值除以总值...我只是无法完成它... :(
非常感谢!
Mar*_*ers 26
对值进行求和,然后使用字典理解来生成具有规范化值的新字典:
total = sum(a.itervalues(), 0.0)
a = {k: v / total for k, v in a.iteritems()}
Run Code Online (Sandbox Code Playgroud)
你可以把它挤成一个单行,但它不会那么可读:
a = {k: v / total for total in (sum(a.itervalues(), 0.0),) for k, v in a.iteritems()}
Run Code Online (Sandbox Code Playgroud)
我给了sum()一个浮点运算初始值,以防止/经营者利用在Python 2楼师,如果这会发生total,并v会都为整数.
在Python 3中,删除iter*前缀:
a = {k: v / total for total in (sum(a.values()),) for k, v in a.items()}
Run Code Online (Sandbox Code Playgroud)
注意,你不希望使用{k: v / sum(a.values()) for k, v in a.items()}这里; 在理解循环中为每次迭代执行值表达式,sum()一次又一次地重新计算.将sum()在字典中的所有N项循环,所以你最终的二次O(N ^ 2)的解决方案,而不是一个O(N)解决您的问题.
| 归档时间: |
|
| 查看次数: |
15359 次 |
| 最近记录: |