检查字典中是否存在密钥比在Python中捕获KeyError更好?

时间:2012-06-21 00:06:00

标签: python hash hashmap hashtable

我在Python方面有一些经验,但我正在学习Udacity计算机科学课程,以填补我所学到的空白,并补充我已经知道的内容。该课程重复了一个哈希表查找函数,如果该键不在哈希表中,则该键返回None表示键的值。当密钥不存在时,Python的字典类型会抛出KeyError,因此课程表示在获取其值之前使用key in mydict

我想知道的是,如果做得更好:

mydefaultval = 75
key = ..
mydict = ..
if key in mydict:
    val = mydict[key]
else:
    val = mydefaultval

..或

mydefaultval = 75
key = ..
mydict = ..
try:
    val = mydict[key]
except KeyError:
    val = mydefaultval

我想,对于Python来检查密钥是否存在,它必须在字典中找到它。如果我然后抓住该键的值,它必须做两次同样的事情。我是否认为这是正确的,或者Python会做其他事情吗?

2 个答案:

答案 0 :(得分:10)

最好的方法是使用dict.get:

val = my_dict.get(key, mydefaultval)

如果没有这样一个很棒的方法,我建议使用例外。 Python文化是不禁止异常,并且通常显式检查实际上会捕获异常。

答案 1 :(得分:0)

如果每次使用特定字典时默认值都是相同的值,则另一个选项是使用collections.defaultdict。声明dict比使用dict.get()解决方案更加冗长,但使用起来更加简洁:

>>> from collections import defaultdict
>>> mydict = defaultdict( lambda: 75 )
>>> mydict[3]
75