处理或引发Python异常是否有效?
最近,我一直在使用一些大型词典(大型含义~数千个元素),因此我一直在雇佣这个小家伙:处理或引发Python异常是否有效?,python,dictionary,exception-handling,Python,Dictionary,Exception Handling,最近,我一直在使用一些大型词典(大型含义~数千个元素),因此我一直在雇佣这个小家伙: try: dict[key] #do something except KeyError: pass 代替 if key in dict.keys() #do something 我想知道在哪种字典大小下,前者比后者更有效?根据我的理解,如果keys()很小,那么第二种方法会更快,但是在什么情况下使用第一种方法会变得更好呢 if key in dict.keys(): Py
try:
dict[key]
#do something
except KeyError:
pass
代替
if key in dict.keys()
#do something
我想知道在哪种字典大小下,前者比后者更有效?根据我的理解,如果keys()
很小,那么第二种方法会更快,但是在什么情况下使用第一种方法会变得更好呢
if key in dict.keys():
Python2.x必须进行O(N)比较以确定key
是否在dict
中,因为dict.keys()
返回一个键列表。(但在Python3.x中这很好,因为它返回一个类似集合的视图对象,所以查找速度会更快)
相反,像这样使用常量时间查找
if key in dict:
这将计算
键的哈希值
并在dict
或我个人最喜欢的:a=dict.get(key,None)@fileoffset True中查找,如果您希望避免异常并获取默认值,可以这样做。但是OP正在尝试执行键查找,因此我同意使用方法:-)中的,尽管您也可以使用:,如果a:
来模拟:)