考虑到:

>>> d = {'a': 1, 'b': 2}

下面哪个选项是检查a是否在d中的最好方法?

>>> 'a' in d
True
>>> d.has_key('a')
True

当前回答

根据python文档:

Has_key()已弃用 输入d。

其他回答

In显然更python化。

事实上,has_key()在Python 3.x中已被删除。

dict.has_key()的解决方案已弃用,请使用'in'——sublime文本编辑器3

这里我举了一个名为“ages”的字典的例子

ages = {}

# Add a couple of names to the dictionary
ages['Sue'] = 23

ages['Peter'] = 19

ages['Andrew'] = 78

ages['Karren'] = 45

# use of 'in' in if condition instead of function_name.has_key(key-name).
if 'Sue' in ages:

    print "Sue is in the dictionary. She is", ages['Sue'], "years old"

else:

    print "Sue is not in the dictionary"

有一个例子,它实际上会扼杀你的表现。

如果你在一个只实现__getitem__和has_key()而不实现__contains__的O(1)容器上使用in,你将把O(1)搜索变成O(N)搜索(就像通过__getitem__返回到线性搜索一样)。

Fix显然是微不足道的:

def __contains__(self, x):
    return self.has_key(x)

Has_key是一个字典方法,但in将适用于任何集合,甚至当__contains__缺失时,in将使用任何其他方法迭代集合以找出答案。

如果你有这样的东西:

t.has_key(ew)

为了在python3上运行,将其更改为以下。X及以上:

key = ew
if key not in t