You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何从已降序排序的词频字典中仅打印前20个高频词

解决方法

你只需要修改遍历排序后字典的循环逻辑,限制只取前20个条目即可。Python 3.7及以上版本默认保留字典的插入顺序,你排序后的sorted_dict本身已经按频次降序排列,直接对条目切片取前20项即可。

核心修改点

把原来遍历全量字典的代码:

for w in sorted_dict:
    print(w, sorted_dict[w]) 

替换为以下任意一种写法即可:

  • 写法1(直接对条目切片,最直观)
for w, cnt in list(sorted_dict.items())[:20]:
    print(w, cnt)
  • 写法2(用计数器限制输出次数)
output_num = 0
for w in sorted_dict:
    if output_num >= 20:
        break
    print(w, sorted_dict[w])
    output_num += 1

补全后的完整可用代码

你原来的代码还存在两处小问题:未导入标点库、wordlist变量未定义且参数book没有用到,以下是补全后的版本:

# 导入标点库,避免punctuation未定义报错
from string import punctuation

def wordcount(book):
    single_list = []        
    freq_dict = {}
    # 从传入的文本参数拆分出单词列表
    wordlist = book.split()
 
    for word in wordlist:
        no_punc = word.strip(punctuation)
        lower_case = no_punc.lower()
        # 过滤全是标点生成的空字符串
        if lower_case:
            single_list.append(lower_case)

    for word in single_list:
        if word in freq_dict:
            freq_dict[word] += 1 
        else:
            freq_dict[word] = 1 
    sorted_dict = dict(sorted(freq_dict.items(), key = lambda kv: kv[1], reverse = True))
    # 仅输出前20个高频词
    for w, cnt in list(sorted_dict.items())[:20]:
        print(w, cnt) 

# 读入你的txt文本内容传入函数即可,示例:
# book = open("你的词频文件.txt", encoding="utf-8").read()
# wordcount(book)

运行后就只会输出频次最高的前20个单词,和你之前输出的前20行内容完全一致。

内容的提问来源于stack exchange,提问作者gavmross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:36:07