我想在更新键的值之前测试字典中是否存在键。我编写了以下代码:

if 'key1' in dict.keys():
  print "blah"
else:
  print "boo"

我认为这不是完成这项任务的最佳方式。有没有更好的方法来测试字典中的关键字?


当前回答

有关已接受答案的建议方法(1000万个循环)执行速度的其他信息:

mydict中的“key”已用时间1.07秒mydict.get('key')运行时间1.84秒mydefaultdict['key']已用时间1.07秒

因此,建议对get使用in或defaultdict。

其他回答

我建议改用setdefault方法。听起来它可以做你想做的一切。

>>> d = {'foo':'bar'}
>>> q = d.setdefault('foo','baz') #Do not override the existing key
>>> print q #The value takes what was originally in the dictionary
bar
>>> print d
{'foo': 'bar'}
>>> r = d.setdefault('baz',18) #baz was never in the dictionary
>>> print r #Now r has the value supplied above
18
>>> print d #The dictionary's been updated
{'foo': 'bar', 'baz': 18}

获得结果的方法有:

如果在Python 3中删除了your_dict.has_key(key)如果输入您的目录try/except块

哪个更好取决于三件事:

字典“通常有键”还是“通常没有键”。你打算使用if…else…elseif…else这样的条件吗?字典有多大?

阅读更多:http://paltman.com/try-except-performance-in-python-a-simple-test/

使用try/block而不是“in”或“if”:

try:
    my_dict_of_items[key_i_want_to_check]
except KeyError:
    # Do the operation you wanted to do for "key not present in dict".
else:
    # Do the operation you wanted to do with "key present in dict."

您可以将代码缩短为:

if 'key1' in my_dict:
    ...

然而,这充其量只是一种外观上的改进。为什么你认为这不是最好的方法?

Python中的字典有一个get('key',默认)方法。因此,您可以设置一个默认值,以防没有任何键。

values = {...}
myValue = values.get('Key', None)

有关已接受答案的建议方法(1000万个循环)执行速度的其他信息:

mydict中的“key”已用时间1.07秒mydict.get('key')运行时间1.84秒mydefaultdict['key']已用时间1.07秒

因此,建议对get使用in或defaultdict。