协慌网

登录 贡献 社区

检查字典中是否已存在给定键

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

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

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

答案

in是测试dict键存在的预期方法。

d = dict()

for i in xrange(100):
    key = i % 10
    if key in d:
        d[key] += 1
    else:
        d[key] = 1

如果你想要一个默认值,你总是可以使用dict.get()

d = dict()

for i in xrange(100):
    key = i % 10
    d[key] = d.get(key, 0) + 1

... 如果您想始终确保任何键的默认值,您可以使用collections模块中的defaultdict ,如下所示:

from collections import defaultdict

d = defaultdict(lambda: 0)

for i in xrange(100):
    d[i % 10] += 1

... 但一般来说, in关键字是最好的方法。

您不必调用密钥:

if 'key1' in dict:
  print "blah"
else:
  print "boo"

这会更快,因为它使用字典的散列而不是进行线性搜索,调用键就可以。

您可以使用in关键字测试字典中是否存在密钥:

d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False

在变更之前检查字典中是否存在键的常见用法是默认初始化值(例如,如果您的值是列表,并且您希望确保有一个空列表,您可以将其追加到插入键的第一个值时)。在这种情况下,您可能会发现collections.defaultdict()类型是有意义的。

在旧代码中,您可能还会发现has_key()一些用法,这是一种不推荐使用的方法,用于检查字典中是否存在键(只需key_name in dict_name使用key_name in dict_name )。