关于python:在dict中处理keyerror的最佳方法

Best way to handle a keyerror in a dict

当我试图从dict中获取值时,我想知道处理keyerror的最佳方法。

我需要这个,因为我的口述记录了一些事件的计数。每当一个事件发生时,我从听写中提取计数,然后递增并放回原处。

我在网上找到了一些解决方案,但它们适用于其他语言。感谢您的帮助。

我正在处理keyError异常。想知道在字典中处理keyerror的最佳方法。

注意:这不是对列表中的项目进行计数,而是在从dict中检索值(不存在)时处理异常。


如果要使用dict,可以使用dict.get

1
mydict[key] = mydict.get(key, 0) + 1

或者你可以处理KeyError

1
2
3
4
try:
    mydict[key] += 1
except KeyError:
    mydict[key] = 1

或者你可以使用defaultdict

1
2
3
from collections import defaultdict
mydict = defaultdict(int)
mydict[key] += 1


您要做的最合适的数据结构是collections.Counter,其中缺少的键的隐式值为0

1
2
3
4
from collections import Counter
events = Counter()
for e in"foo","bar","foo","tar":
    events[e] += 1


collections.defaultdict可以帮助构建Python代码:

1
2
3
count = collections.defaultdict(int) # => default value is 0
...
count[event] += 1 # will end to 1 on first hit and will increment later


python中的异常并不十分昂贵。

另外,如果你认为大部分时间你在寻找的钥匙(计数)都在那里,那么它是完全好的。

1
2
3
4
5
6
d = {}
while True:
    try:
        d['count'] += 1
    except KeyError:
        d['count'] = 1  # happens only once