【问题标题】:Is handling or raising Python exceptions efficient?处理或引发 Python 异常是否有效?
【发布时间】:2014-09-15 11:01:29
【问题描述】:

最近我一直在使用一些大字典(大意思是〜数千个元素),所以我一直在雇用这个小家伙:

try:
    dict[key]
    #do something
except KeyError:
    pass

代替

if key in dict.keys()
    #do something

我想知道哪个字典大小前者比后者更有效率?据我了解,如果keys() 很小,第二种方法会更快,但是从什么时候开始使用第一种方法变得更好?

【问题讨论】:

    标签: python dictionary exception-handling


    【解决方案1】:

    当你这样做时

    if key in dict.keys():
    

    Python 2.x 必须进行 O(N) 比较才能确定 key 是否在 dict 中,因为 dict.keys() 返回键列表。 (但这在 Python 3.x 中很好,因为它返回一个类似集合的视图对象,查找会更快)

    相反,使用像这样的恒定时间查找

    if key in dict:
    

    这将计算key 的哈希值并在dict 中查找。

    【讨论】:

    • 或者,我个人最喜欢的:a = dict.get(key, None)
    • @fileoffset True,如果你想避免异常并获得默认值,你可以这样做。但是 OP 正在尝试进行密钥查找,所以我会使用 in 方法:-)
    • 我同意 - 尽管你也可以这样做:if a: 来效仿 :)
    猜你喜欢
    • 2011-06-10
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2013-10-09
    • 2013-01-29
    • 1970-01-01
    • 2014-06-06
    相关资源
    最近更新 更多