Python 基于双说话人词频字典按关键词排序输出四列统计结果
实现方案
直接按照需求逻辑拆分操作,无需额外复杂处理:
- 提取两个词频字典的所有关键词,生成去重后的关键词全集
- 对全集关键词按字典序升序排列
- 遍历排序后的每个关键词,分别查询该词在两个字典中的出现次数,字典中不存在的词默认计数为0
- 计算两个计数的总和,按对齐格式逐行打印四列内容
可直接运行的代码
# 已预处理得到的两个说话人词频字典 bridgekeeper_w = {'hee': 2, 'heh': 1, 'stop': 1, 'what': 3, 'is': 3, 'your': 2, 'name': 1, 'quest': 1, 'the': 1, 'air-speed': 1, 'velocity': 1, 'of': 1, 'an': 1, 'unladen': 1, 'swallow': 1} arthur_w = {'king': 4, 'it': 1, 'is': 1, 'arthur': 1, 'of': 1, 'the': 2, 'britons': 1, 'to': 1, 'seek': 1, 'holy': 1, 'grail': 1, 'what': 1, 'do': 1, 'you': 1, 'mean': 1, 'an': 1, 'african': 1, 'or': 1, 'european': 1, 'swallow': 1} # 获取所有不重复的关键词并按字典序排序 all_words = set(bridgekeeper_w) | set(arthur_w) sorted_words = sorted(all_words) # 逐行格式化输出 for word in sorted_words: cnt_bridgekeeper = bridgekeeper_w.get(word, 0) cnt_arthur = arthur_w.get(word, 0) total_cnt = cnt_bridgekeeper + cnt_arthur # 左对齐关键词占10字符宽度,保证后续数值列对齐,和示例排版一致 print(f"{word:<10} {cnt_bridgekeeper} {cnt_arthur} {total_cnt}")
运行输出效果
african 0 1 1 air-speed 1 0 1 an 1 1 2 arthur 0 1 1 britons 0 1 1 do 0 1 1 european 0 1 1 grail 0 1 1 hee 2 0 2 heh 1 0 1 holy 0 1 1 is 3 1 4 it 0 1 1 king 0 4 4 mean 0 1 1 name 1 0 1 of 1 1 2 or 0 1 1 quest 1 0 1 seek 0 1 1 stop 1 0 1 swallow 1 1 2 the 1 2 3 to 0 1 1 unladen 1 0 1 velocity 1 0 1 what 3 1 4 you 0 1 1 your 2 0 2
关键说明
- 用集合的并集操作合并两个字典的键,能快速拿到所有出现过的关键词,不会遗漏任意一方的用词
- 字典的
get方法设置默认值0,不需要写额外的存在性判断分支,简化代码逻辑 - 格式化时的
<10参数控制关键词左对齐、占用固定宽度,保证后续三列数值整齐对齐,完全匹配示例的排版要求 - 内置
sorted方法对字符串排序的逻辑就是按字典序升序,直接满足关键词排序的要求
内容的提问来源于stack exchange,提问作者Marquee
相关产品推荐
相关产品推荐

