判断是否在字典里用in还是用has_key()

这两个都是一样的结果呢

z = {'a': 1, 'b': 2, 'c':3}
'a' in z
z.has_key('a')
阅读 59.3k
4 个回答

官方文档推荐用 key in dict 的语法,因为它更短更通俗易懂。has_key是老旧遗留的api,为了支持2.2之前的代码留下的。Python3已经删除了该函数。

楼上说得都够详细了,我就贴段代码吧:

#src/Python-2.6.8/Objects/dictobject.c

static PyObject *
dict_has_key(register PyDictObject *mp, PyObject *key)
{
    if (PyErr_WarnPy3k("dict.has_key() not supported in 3.x; "
                       "use the in operator", 1) < 0) 
        return NULL;
    return dict_contains(mp, key);
}

从运算角度来说,使用in更快

> python2 -mtimeit -s'd=dict.fromkeys(range(99))' '12 in d'
10000000 loops, best of 3: 0.0374 usec per loop
> python2 -mtimeit -s'd=dict.fromkeys(range(99))' 'd.has_key(12)'
10000000 loops, best of 3: 0.0719 usec per loop

这也是为什么使用in更加好的原因
http://www.chenxm.cc/post/672...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题