如何在创建Python字典的同时完成填充?
问题:如何在创建Python字典时同时完成字符计数填充?
我正在寻找一种能在创建Python字典的同时完成填充的方法。目前我实现了一个简单的方法:先创建一个所有键值为0的字典,再遍历字符串进行填充,具体代码如下:
def letter_count(word): letter_dic = {} for w in word: letter_dic[w] = 0 for w in word: letter_dic[w] += 1 return letter_dic
该方法用于统计给定字符串中每个字母的出现次数,输入示例为:
"leumooeeyzwwmmirbmf"
对应的输出示例为:
{'l': 1, 'e': 3, 'u': 1, 'm': 4, 'o': 2, 'y': 1, 'z': 1, 'w': 2, 'i': 1, 'r': 1, 'b': 1, 'f': 1}
请问是否可以不使用两次循环,在创建字典的同时完成填充?
解决方案
当然可以,完全不需要两次循环,以下几种方法都能在一次遍历中完成字典的创建与计数填充:
方法1:单次循环中直接判断键是否存在
遍历字符串时,检查当前字符是否已在字典中:存在则对应值加1,不存在则初始化为1,一次循环完成所有操作:
def letter_count(word): letter_dic = {} for w in word: if w in letter_dic: letter_dic[w] += 1 else: letter_dic[w] = 1 return letter_dic
方法2:用dict.get()简化逻辑
利用字典的get()方法可以省去显式的if判断,该方法会返回键对应的值,若键不存在则返回指定默认值:
def letter_count(word): letter_dic = {} for w in word: letter_dic[w] = letter_dic.get(w, 0) + 1 return letter_dic
方法3:使用collections.defaultdict
Python标准库collections中的defaultdict可指定默认值类型,遇到不存在的键时会自动用默认值初始化(int类型默认值为0),代码更简洁:
from collections import defaultdict def letter_count(word): letter_dic = defaultdict(int) for w in word: letter_dic[w] += 1 # 若需要返回普通字典而非defaultdict,可转换:return dict(letter_dic) return letter_dic
方法4:使用collections.Counter(最简便)
collections.Counter是专门为计数场景设计的工具类,直接传入字符串即可得到统计结果(返回的Counter对象继承自dict,可直接当作字典使用):
from collections import Counter def letter_count(word): return Counter(word)
传入示例输入后,得到的结果与你要求的输出完全一致,无需手动编写循环逻辑。
内容的提问来源于stack exchange,提问作者DDela
相关产品推荐
相关产品推荐

