考虑到:
>>> d = {'a': 1, 'b': 2}
下面哪个选项是检查a是否在d中的最好方法?
>>> 'a' in d
True
>>> d.has_key('a')
True
考虑到:
>>> d = {'a': 1, 'b': 2}
下面哪个选项是检查a是否在d中的最好方法?
>>> 'a' in d
True
>>> d.has_key('a')
True
当前回答
In hands-down,不仅在优雅(不被弃用;-)上,而且在性能上,例如:
$ python -mtimeit -s'd=dict.fromkeys(range(99))' '12 in d'
10000000 loops, best of 3: 0.0983 usec per loop
$ python -mtimeit -s'd=dict.fromkeys(range(99))' 'd.has_key(12)'
1000000 loops, best of 3: 0.21 usec per loop
虽然下面的观察并不总是正确的,但您会注意到,通常在Python中,更快的解决方案更优雅和Python化;这就是为什么-mtimeit是如此有用——它不仅仅是节省100纳秒!-)
其他回答
In hands-down,不仅在优雅(不被弃用;-)上,而且在性能上,例如:
$ python -mtimeit -s'd=dict.fromkeys(range(99))' '12 in d'
10000000 loops, best of 3: 0.0983 usec per loop
$ python -mtimeit -s'd=dict.fromkeys(range(99))' 'd.has_key(12)'
1000000 loops, best of 3: 0.21 usec per loop
虽然下面的观察并不总是正确的,但您会注意到,通常在Python中,更快的解决方案更优雅和Python化;这就是为什么-mtimeit是如此有用——它不仅仅是节省100纳秒!-)
Has_key是一个字典方法,但in将适用于任何集合,甚至当__contains__缺失时,in将使用任何其他方法迭代集合以找出答案。
使用dict.has_key()当(且仅当)你的代码需要在Python 2.3之前的版本中可运行时(当dict引入key时)。
根据python文档:
Has_key()已弃用 输入d。
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"