Python如何构建以字母为键、出现次数为值的全字母统计字典
实现代码
import string from collections import Counter listy = ["hello","there","I","am","a","string"] # 先统计所有小写字母的出现次数 all_letters = ''.join(listy).lower() counter = Counter(all_letters) # 字典推导式生成包含全部a-z的计数字典 letter_count = {char: counter.get(char, 0) for char in string.ascii_lowercase} print(letter_count)
代码说明
- 首先用
''.join(listy)把列表中所有字符串拼接成一个完整字符串,调用lower()统一转成小写,避免大写字母漏统计 - 用Counter统计拼接后字符串里每个字符的出现次数
- 字典推导式遍历a-z所有小写字母,用
counter.get(char, 0)获取对应字母的计数,没出现过就返回0,刚好满足保留所有字母的需求 - 你原代码存在两个问题:一是变量名不匹配,定义的是
letter_count,打印时写的dict_count会报未定义错误;二是只做了全0字典的初始化,没有补充实际计数逻辑
关于字典推导式的疑问解答
这种场景用字典推导式是非常合适的,属于最优写法之一:
- 写法简洁紧凑,符合Python的惯用法,一行就能完成初始化+赋值的逻辑
- 可读性很好,只要熟悉推导式语法,能一眼看出是遍历26个字母生成对应计数的字典
- 性能和分步骤初始化再更新的写法没有差异,底层都是遍历26个字母完成赋值
如果你刚接触推导式觉得不好理解,也可以用分步骤的等价写法:
import string from collections import Counter listy = ["hello","there","I","am","a","string"] # 先初始化全0字典 letter_count = {key: 0 for key in string.ascii_lowercase} # 统计所有字母次数 all_letters = ''.join(listy).lower() counter = Counter(all_letters) # 更新计数到初始化的字典中 letter_count.update(counter) print(letter_count)
内容的提问来源于stack exchange,提问作者Cecil Shepherd
相关产品推荐
相关产品推荐

