为什么用于词频统计的Python字典推导式无法得到正确运行结果?
字典推导式统计词频异常问题分析
错误原因
- 字典推导式的执行逻辑是先完成所有键值对的计算,再一次性生成完整字典赋值给变量,推导式运行过程中不会实时更新你提前定义的空
usage_dict - 推导式内调用
usage_dict.get(word, 0)时,每次读取的都是初始的空字典,拿到的默认值永远为0,因此每个键的计算结果都是0 + 1 = 1 - 字典键具有唯一性,重复出现的单词会被后续生成的同键、值为1的键值对覆盖,最终所有单词的计数都为1
正确实现方案
方案1:使用collections.Counter(推荐)
这是Python官方提供的专门用于计数的工具类,代码简洁效率高:
from collections import Counter user_input = input().lower().split() usage_dict = dict(Counter(user_input)) print(usage_dict)
方案2:普通for循环实现
无需导入模块,兼容性好:
user_input = input().lower().split() usage_dict = {} for word in user_input: usage_dict[word] = usage_dict.get(word, 0) + 1 print(usage_dict)
方案3:推导式实现(仅适合短文本)
如果必须使用推导式,可以结合去重后的单词集合统计次数:
user_input = input().lower().split() usage_dict = {word: user_input.count(word) for word in set(user_input)} print(usage_dict)
注意:该方案每次调用
count都会遍历整个输入列表,时间复杂度为O(n²),长文本场景下效率极低,不推荐使用。
内容的提问来源于stack exchange,提问作者Rahul Deshmukh
相关产品推荐
相关产品推荐

