在Python中迭代OrderedDict

2024-09-28 05:28:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下几点OrderedDict

OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)])

这实际上表示单词中字母的频率

在第一步中,我将使用最后两个元素创建这样的联合元组

 pair1 = list.popitem()
    pair2 = list.popitem()
    merge_list = (pair1[0],pair2[0])
    new_pair = {}
    new_pair[merge_list] = str(pair1[1] + pair2[1])
    list.update(new_pair);

这为我创建了以下OrderedList:

OrderedDict([('r', 1), ('s', 1), ('a', 1), (('y', 'n'), '2')])

现在我想迭代这些元素,每次都取最后三个元素,并根据值的较低和来决定union对象是什么

例如,上述列表将变为:

OrderedDict([('r', 1), (('s', 'a'), '2'), (('y', 'n'), '2')])

但上述情况是:

OrderedDict([ ('r', 1), ('s', 2), ('a', 1), (('y', 'n'), '2')])

结果将是:

OrderedDict([('r', 1), ('s', 2), (('a','y', 'n'), '3')])

因为我想让左边的值更小

我试着自己去做,但不知道如何在一个有序的过程中从头到尾迭代

我怎么做

已编辑 答复评论:

我得到了一本关于句子中字母频率的词典:

{ 's':1, 'a':1, 'n':1, 'y': 1}

需要从中创建一棵哈夫曼树

例如:

((s,a),(n,y))

我正在使用python 3.3


Tags: 元素new字母updatemerge单词list频率
3条回答

简单例子

from collections import OrderedDict

d = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3

for key, value in d.items():
    print key, value

输出:

a 1
b 2
c 3

您可以使用enumerateiteritems进行迭代:

dict = OrderedDict()
# ...

for i, (key, value) in enumerate(dict.iteritems()):
    # Do what you want here

how to iterate from end to beginning over an OrderedDict ?

要么:

z = OrderedDict( ... )
for item in z.items()[::-1]:
   # operate on item

或:

z = OrderedDict( ... )
for item in reversed(z.items()):
   # operate on item

相关问题 更多 >

    热门问题