如何统计术语在字典各值列表中的出现次数(单列表不重复计数)
原有代码问题
你给出的代码存在核心逻辑缺陷:没有遍历每个值列表内的单词,直接引用了未定义的word变量,无法完成统计逻辑。
高效实现方案
采用单轮遍历+临时去重集合的方案即可满足需求,内存开销仅和单个列表的最大去重单词数挂钩,完全可以支撑超大体量的字典,实现代码如下:
from collections import defaultdict # 初始化频率字典,缺省值为0 freq_dict = defaultdict(int) # 注意不要用dict作为变量名,会覆盖Python内置的dict类,此处替换为你实际的原字典变量名 for _, word_list in your_original_dict.items(): # 临时集合仅记录当前列表已统计过的单词,处理完当前列表后自动释放 current_seen = set() for word in word_list: if word not in current_seen: current_seen.add(word) freq_dict[word] += 1
方案说明
- 相比提前把所有值列表转set存储的方案,该方案不会一次性加载所有去重后的单词到内存,峰值内存仅和单个最长列表的去重单词量挂钩,内存开销低几个数量级
- 时间复杂度和全量遍历所有单词的时间一致,额外的集合查询、插入操作均为O(1)均摊复杂度,不会带来明显的性能损耗
- 天然解决了同一个列表内单词重复出现导致的重复计数问题
内容的提问来源于stack exchange,提问作者jinx
相关产品推荐
相关产品推荐

