因此,我编写了一个快速的 Python 程序来创建基于文本文件的哈夫曼树。到目前为止,一切都很好,除了我呈现生成的霍夫曼代码的方式。为了遵循惯例,我希望从最频繁到最不频繁地显示它们。幸运的是,我有另一个存储频率和对应字母的列表。此频率列表已排序。我的问题是我不知道使用哪个键来使用第一个列表中的值对第二个列表进行排序。
frequencies = [[6, 's'], [4, 'e'], [4, 'l'], [3, ' '], [2, 'h'], [1, 'a']]
huffman_codes = [['s', '10'], ['h', '011'], ['e', '111'], [' ', '101'], ['l', '00'], ['a', '001']]
我想要的是
[['s', '10'], ['e', '111'], ['l', '00'], [' ', '101'], ['h', '011'], ['a', '001']]
因为高频霍夫曼码的代码长度最短,所以我尝试根据它们的代码长度对它们进行排序,但这不一定是真的,因为我的程序允许用户更改它们是否应该以 1 或 0 开头左边。代码未排序的原因是绘制霍夫曼树的性质。
请您参考如下方法:
您可以使用查找字典来获取 key :
frequencies = [[6, 's'], [4, 'e'], [4, 'l'], [3, ' '], [2, 'h'], [1, 'a']]
huffman_codes = [['s', '10'], ['h', '011'], ['e', '111'], [' ', '101'], ['l', '00'], ['a', '001']]
lookup = {y : x for x, y in frequencies}
result = sorted(huffman_codes, key=lambda x: lookup[x[0]], reverse=True)
print(result)
输出
[['s', '10'], ['e', '111'], ['l', '00'], [' ', '101'], ['h', '011'], ['a', '001']]
