为什么KeyError也会引发相应的键?

问题描述 投票:0回答:1
def countLetter(string):
    dic = dict()
    for char in string:
        dic[char] = (1,dic[char]+1)[char in dic]
    print(dic)
countLetter('aabcb')

[这里,我试图计算每个字母的出现次数,但是第4行会引发错误。它引发一个KeyError

python-3.x keyerror
1个回答
1
投票

问题是此行:

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
© www.soinside.com 2019 - 2024. All rights reserved.