词频分析器开发:如何对词频字典按频率降序+字典序排序?
解决词频排序的问题:先按频率降序,同频率按字典序排序
嘿,这个需求其实很好实现!既然你已经拿到了键为单词、值为频率的字典,咱们直接利用排序函数的多维度排序key就能搞定。
核心思路
排序的优先级是:
- 第一优先级:按单词频率降序排列
- 第二优先级:当频率相同时,按单词的字典序升序排列
在Python里,sorted()函数支持传入一个key参数,我们可以用元组来定义排序的优先级——元组的元素会按顺序依次比较:先比第一个元素,第一个相等再比第二个,以此类推。
具体实现代码
假设你的词频字典是这样的:
word_counts = {'hello': 20, 'hi': 20, 'world': 15, 'python': 10, 'apple': 15}
我们只需要这样写排序逻辑:
# 对字典的键值对进行排序 sorted_word_list = sorted(word_counts.items(), key=lambda item: (-item[1], item[0])) # 逐行输出结果 for word, count in sorted_word_list: print(f"{word}: {count}")
代码解释
lambda item: (-item[1], item[0]):这个匿名函数就是排序的核心规则-item[1]:把频率取负数,这样sorted()默认的升序排序,就会把原频率高的单词排在前面(相当于频率降序)item[0]:当两个单词的频率取负后相等(也就是原频率相同),就会比较单词本身,按字典序升序排列
输出结果
运行上面的代码,你会得到这样的输出:
hello: 20 hi: 20 apple: 15 world: 15 python: 10
完全符合你的需求:频率高的在前,同频率的单词按字典序排列。
内容的提问来源于stack exchange,提问作者Zahar Bozhok
相关产品推荐
相关产品推荐

