3

我在 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 会做其他事情?

4

2 回答 2

10

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

val = my_dict.get(key, mydefaultval)

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

于 2012-06-21T00:07:10.367 回答
0

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

>>> from collections import defaultdict
>>> mydict = defaultdict( lambda: 75 )
>>> mydict[3]
75
于 2012-06-21T01:31:55.550 回答