[英]method returns a dict, checking for existence of key returns KeyError: 0
[英]Is checking for the existence of a key in a dictionary better than catching a KeyError in Python?
我在Python方面有一些經驗,但是我正在參加Udacity計算機科學課程,以填補我所學知識的空白並補充我已經知道的知識。 該課程遍歷了哈希表查找功能,如果該鍵不在哈希表中,則該鍵針對鍵的值返回None。 當鍵不存在時,Python的字典類型會引發key in mydict
,因此該課程說要在獲取其值之前key in mydict
使用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會做其他事情?
最好的方法是使用dict.get:
val = my_dict.get(key, mydefaultval)
如果沒有像這樣的很棒的方法,我建議使用該異常。 Python的文化是不禁止例外,而且無論如何,顯式檢查通常實際上都會捕獲例外。
如果每次使用特定字典時默認值都將是相同的值,則另一個選擇是使用collections.defaultdict
。 與dict.get()
解決方案相比,聲明dict更為冗長,但用法更為繁瑣:
>>> from collections import defaultdict
>>> mydict = defaultdict( lambda: 75 )
>>> mydict[3]
75
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.