def countLetter(string):
dic = dict()
for char in string:
dic[char] = (1,dic[char]+1)[char in dic]
print(dic)
countLetter('aabcb')
[这里,我试图计算每个字母的出现次数,但是第4行会引发错误。它引发一个KeyError。
问题是此行:
dic[char] = (1,dic[char]+1)[char in dic]
是急切地在构建dic[char]+1
索引之前的过程中评估tuple
,您将测试char in dic
是否选择tuple
的元素。因此,它在测试有机会防止失败查找之前以KeyError
终止。要使其变得懒惰,您可以执行以下操作:
dic[char] = dic[char] + 1 if char in dic else 1
或者您可以只使用a method designed for this来避免显式测试:
dic[char] = dic.get(char, 0) + 1
尽管通过collections.Counter
使此特定模式更简单:
collections.Counter