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
相关产品推荐
相关产品推荐

