在字典上循环(以前的值)python

时间:2014-03-02 21:25:25

标签: python dictionary

我有一个将概率与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}

我尝试了一个循环,但我没有找到获得以前值的方法......

有什么想法吗?

2 个答案:

答案 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)])