我有一个将概率与char相关联的词典
d = {'a': 0.2, 'b': 0.3, 'c': 0.4, 'd':0.1}
我正在寻找一种方法,将每个焦点与其频率分布的最低值相关联。因此,每个字符必须与之前的字符串相关联。 我知道字典不是有序的,但应该返回类似
的字样ddist = {'a': 0, 'b': 0.2, 'c': 0.5, 'd': 0.9}
我尝试了一个循环,但我没有找到获得以前值的方法......
有什么想法吗?
答案 0 :(得分:3)
您可以简单地遍历键的排序版本:
d = {'a': 0.2, 'b': 0.3, 'c': 0.4, 'd':0.1}
ddist = {}
t = 0
for key in sorted(d):
ddist[key] = t
t += d[key]
答案 1 :(得分:1)
由于dicts是无序的,因此您需要自己定义密钥顺序,或者从一开始就使用collections.OrderedDict
。
>>> def accumulate(seq):
total = 0
for item in seq:
yield total
total += item
...
>>> keys = ['a', 'b', 'c', 'd'] #For your dict, this is sorted(d)
>>> dict(zip(keys, accumulate(d[k] for k in keys)))
{'a': 0, 'c': 0.5, 'b': 0.2, 'd': 0.9}
#or
>>> from collections import OrderedDict
>>> OrderedDict(zip(keys, accumulate(d[k] for k in keys)))
OrderedDict([('a', 0), ('b', 0.2), ('c', 0.5), ('d', 0.9)])