首页 > 解决方案 > 按降序发布字典内容的频率(Python)

问题描述

我创建了一个字典,计算每个单词在单独的文本文件中出现的次数。到目前为止,它看起来像这样。

import sys

def main():
    d = dict({})
    
    with open(sys.argv[1], encoding="utf-8") as f:
        for line in f: 
            line = line.strip() 
            line = line.lower() 
            words = line.split(" ")
            for word in words: 
                if word in d: 
                    d[word] = d[word] + 1
                else: 
                    d[word] = 1
    
    for key in list(d.keys()):
        print(key, ":", d[key])
    
if __name__ == "__main__":
    main()

在命令行中,我为它输入一个文本文件来计算每个单词的频率(执行“python3 frequencycount.py example.txt”)。此代码有效地执行文本文件中所有单词的列表,并计算它们出现的次数。我现在要做是按出现频率降序打印单词。

例如,我的文本文件是蔬菜列表(胡椒 5 次,胡萝卜 9 次,豌豆 8 次,西兰花 1 次)。该列表如下所示:

Pepper : 5
Carrot : 9
Peas : 8
Broccoli : 1

但是,我希望它像这样打印:

Carrot : 9
Peas : 8
Pepper : 5
Broccoli : 1

我怎样才能让它像这样按降序打印?谢谢。

标签: pythondictionary

解决方案


您可以遍历排序的键列表,其中排序键是 dict 本身的值,并reverse=True使其降序排列。

d = {
'Pepper' : 5,
'Carrot' : 9,
'Peas' : 8,
'Broccoli' : 1,
}


for key in sorted(d, key=d.get, reverse=True):
    print(key, ":", d[key])

输出

Carrot: 9
Peas : 8
Pepper : 5
Broccoli : 1

推荐阅读