【发布时间】:2014-01-25 19:43:13
【问题描述】:
我有以下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')])
我现在想遍历元素,每次取最后三个并根据值的总和较低的值来决定什么是联合对象。
比如上面的列表会变成;
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')])
因为我希望左边的值更小
我尝试自己做,但不明白如何从头到尾遍历 OrderedDict。
我该怎么做?
已编辑 回复评论:
我得到了一个句子中字母频率的字典:
{ 's':1, 'a':1, 'n':1, 'y': 1}
并且需要从中创建一棵霍夫曼树。
例如:
((s,a),(n,y))
我正在使用 python 3.3
【问题讨论】:
-
解决你的XY Problem,这将更容易得到答案!通俗地说——告诉我们您的广泛目标是什么,而不是如何解决您的特定工作方式。
-
你的意思是
reversed(OrderedDict.items())? -
@adsmith 你是对的 - 我编辑了我的问题,实际上我需要做什么
标签: python python-3.x dictionary python-3.3 ordereddict