我不知道如何按升序排列字母列表及其频率,即{'z':1, 'g':3, 'a':5, and so on}
我试图用Python重新创建Huffman算法,一种无损压缩算法。txt
是一个文本字符串,它被拆分,因此每个字母(包括空格)都是一个单独的索引。我试过使用Counter(txt)
,它可以找到每个字母在txt
中出现的次数,并创建一个字典。但是这将字典从最高频率排序到最低频率,我需要它从最低频率排序到最高频率,这样它就遵循了哈夫曼算法的步骤。然后我试着添加
for key, value in sorted(freq.iteritems(), key=lambda(k,v): (v,k)):
print("%s: %s" % (key, value))
但是这会产生语法错误,我不知道这是不是最好的方法。你知道吗
这是我的密码:
from collections import Counter
def huffman(file):
txt = list(map(lambda c2: c2, file)) # Places each individual char into array.
freq=Counter(txt) #Counts numb of times a letter appears.
print(freq)
for key, value in sorted(freq.iteritems(), key=lambda(k,v): (v,k)):
print("%s: %s" % (key, value))
我只需要freq
字典从最不常见到最常见的顺序,以便它遵循哈夫曼算法的步骤。所以它不是{'a':5, 'g':3, 'z':1}
,而是{'z':1, 'g':3, 'a':5}
在python 3.6或更低版本上,使用以下命令:
from collections import OrderedDict freq = OrderedDict(sorted(freq.items(), key=lambda x: x[1]))
从python版本3.7开始,您可以使用以下命令:
freq = dict(sorted(freq.items(), key=lambda x: x[1]))
从版本3.7和更高版本开始的听写默认情况下是按顺序排列的。 每个元组的第一个元素是字母表,第二个元素是频率。因此,在排序函数中,我们使用每个元素的频率作为关键字,按递增顺序对元素进行排序。你知道吗
如果你真的想要一本订好的词典,你就得跳过几个圈套:)
首先要对词典进行排序,以获得一个平面列表:
然后,你把它传给一个订购的信息:
订单号:
然后,您可以这样索引:
输出:
相关问题 更多 >
编程相关推荐