可能重复:
'has_key()' or 'in'?
在Python中,有两种方法可以决定key
中是否有dict
:
if dict.has_key(key)
和if key in dict
有人告诉我,第二个比第一个慢,因为in
关键字使表达式在dict上迭代,所以它会慢于has_key
替代,显然使用哈希做出决定。
我非常怀疑差异,因为我认为Python非常聪明,可以在in
之前将dict
关键字翻译成某种哈希方式,但我找不到任何关于此的正式声明。< / p>
两者之间真的存在效率差异吗?
感谢。
答案 0 :(得分:9)
这两个操作都做同样的事情:检查dict中为密钥实现的哈希表。也不会迭代整个字典。请注意,for x in dict
与if x in dict
不同。它们都使用in
关键字,但操作不同。
in
关键字成为dict.__contains__
上的一个号码,dict可以根据需要实施。
如果这些操作的时间存在差异,它将非常小,并且将与has_key
的函数调用开销有关。
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
不是替代方案。它被弃用了。不要使用它。 (无论如何它都慢了)