python字典 - python是否存在




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

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

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

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


Python字典有一个名为__contains__的方法。 如果字典具有键,则此方法将返回True,否则返回False。

 >>> temp = {}

 >>> help(temp.__contains__)

Help on built-in function __contains__:

__contains__(key, /) method of builtins.dict instance
    True if D has a key k, else False.

python中的字典有一个get('key',default)方法。 所以你可以设置一个默认值,以防没有密钥。

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

print dict.get('key1', 'blah')

不会为dict中的值打印boo,而是通过打印key1的值来确认它的存在来实现目标。


您可以使用has_key()方法:

if dict.has_key('xyz')==1:
    #update the value for the key
else:
    pass

或者dict.get方法设置默认值,如果找不到:

mydict = {"a": 5}

print mydict["a"]            #prints 5
print mydict["b"]            #Throws KeyError: 'b'

print mydict.get("a", 0)     #prints 5
print mydict.get("b", 0)     #prints 0

为什么不使用has_key()方法。

a = {}
a.has_key('b') => #False

a['b'] = 8
a.has_key('b') => #True

你可以缩短这个:

if 'key1' in dict:
    ...

然而,这充其量只是一种美容改善。 为什么你认为这不是最好的方法?


只是一个FYI加入克里斯。 B(最佳答案):

d = defaultdict(int)

也适用; 原因是调用int()返回0 ,这是defaultdict在幕后所做的事情(构建字典时),因此文档中的名称为“Factory Function”。


嗯..你会很熟悉在列表或数据中搜索元素的存在意味着遍历所有内容(至少对于无序列表,例如dict.keys)。相反,使用通常出现的异常和错误,我们可以避免这种复杂性......

d={1:'a',2:'b'}
try:
    needed=d[3]
    print(needed)
except:
    print("Key doesnt exist")

如果您知道要查找哪个密钥(密钥名称),最简单的方法是:

# suppose your dictionary is
my_dict = {'foo': 1, 'bar': 2}
# check if a key is there
if 'key' in my_dict.keys():   # it will evaluates to true if that key is present otherwise false.
    # do something

或者你也可以简单地做:

if 'key' in my_dict:   # it will evaluates to true if that key is present otherwise false.
    # do something

您不必调用密钥:

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

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


我建议使用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}

我用的是try / except ; 如果抛出异常,则字典中不存在密钥。 例:

st = 'sdhfjaks'
d = {}
try:
    print d['st']
except Exception, e:
    print 'Key not in the dictionary'

要检查,您可以使用has_key()方法

if dict.has_key('key1'):
   print "it is there"

如果你想要一个值,那么你可以使用get()方法

a = dict.get('key1', expeced_type)

如果要将元组或列表或字典或任何字符串作为默认值作为返回值,请使用get()方法

a = dict.get('key1', {}).get('key2', [])




dictionary