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

字典上的循环(以前的值)python,python,dictionary,Python,Dictionary,我有一本字典把概率和字符联系起来 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} 我尝试了一个循环,但我没有找到一种方法来获得以前的值 有什么想法吗?您可以简单地迭代排序后的密钥版本: d = {'a': 0

我有一本字典把概率和字符联系起来

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}
我尝试了一个循环,但我没有找到一种方法来获得以前的值


有什么想法吗?

您可以简单地迭代排序后的密钥版本:

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]

您只需在已排序的密钥版本上迭代:

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]

由于dict是无序的,所以您需要自己定义键顺序,或者从一开始就使用

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

由于dict是无序的,所以您需要自己定义键顺序,或者从一开始就使用

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