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

mow*_*ker 3 python hash hashtable hashmap

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

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

mydefaultval = 75
key = ..
mydict = ..
if key in mydict:
    val = mydict[key]
else:
    val = mydefaultval
Run Code Online (Sandbox Code Playgroud)

.. 要么

mydefaultval = 75
key = ..
mydict = ..
try:
    val = mydict[key]
except KeyError:
    val = mydefaultval
Run Code Online (Sandbox Code Playgroud)

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

Ned*_*der 10

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

val = my_dict.get(key, mydefaultval)
Run Code Online (Sandbox Code Playgroud)

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