Python中dict.has_key和dict键之间的效率差异

时间:2012-07-09 01:25:43

标签: python performance dictionary

  

可能重复:
  'has_key()' or 'in'?

在Python中,有两种方法可以决定key中是否有dict

if dict.has_key(key)if key in dict

有人告诉我,第二个比第一个慢,因为in关键字使表达式在dict上迭代,所以它会慢于has_key替代,显然使用哈希做出决定。

我非常怀疑差异,因为我认为Python非常聪明,可以在in之前将dict关键字翻译成某种哈希方式,但我找不到任何关于此的正式声明。< / p>

两者之间真的存在效率差异吗?

感谢。

3 个答案:

答案 0 :(得分:9)

这两个操作都做同样的事情:检查dict中为密钥实现的哈希表。也不会迭代整个字典。请注意,for x in dictif x in dict不同。它们都使用in关键字,但操作不同。

in关键字成为dict.__contains__上的一个号码,dict可以根据需要实施。

如果这些操作的时间存在差异,它将非常小,并且将与has_key的函数调用开销有关。

BTW,一般偏好key in dict作为意图的清晰表达而不是dict.has_key(key)。请注意,速度与首选项无关。除非您知道自己处于关键路径,否则可读性比速度更重要。

答案 1 :(得分:3)

由于函数调用,

D.has_key实际上较慢:

>>> D = dict((x, y) for x, y in zip(range(1000000), range(1000000)))
>>> from timeit import Timer
>>> t = Timer("1700 in D", "from __main__ import D")
>>> t.timeit()
0.10631704330444336
>>> t = Timer("D.has_key(1700)", "from __main__ import D")
>>> t.timeit()
0.18113207817077637

答案 2 :(得分:3)

has_key不是替代方案。它被弃用了。不要使用它。 (无论如何它都慢了)