我需要一种方法来获得字典值,如果它的键存在,或简单地返回None,如果它不存在。
然而,如果你搜索一个不存在的键,Python会引发一个KeyError异常。我知道我可以检查钥匙,但我在寻找更明确的东西。如果键不存在,是否有一种方法只返回None ?
我需要一种方法来获得字典值,如果它的键存在,或简单地返回None,如果它不存在。
然而,如果你搜索一个不存在的键,Python会引发一个KeyError异常。我知道我可以检查钥匙,但我在寻找更明确的东西。如果键不存在,是否有一种方法只返回None ?
当前回答
给那些使用字典的人。获取嵌套字典的技术,而不是显式地检查字典的每一层,或扩展dict类,您可以将默认返回值设置为除最外层之外的空字典。这里有一个例子:
my_dict = {'level_1': {
'level_2': {
'level_3': 'more_data'
}
}
}
result = my_dict.get('level_1', {}).get('level_2', {}).get('level_3')
# result -> 'more_data'
none_result = my_dict.get('level_1', {}).get('what_level', {}).get('level_3')
# none_result -> None
警告:请注意,此技术仅在预期键值为字典时有效。如果键what_level确实存在于字典中,但它的值是字符串或整数等,那么它将引发AttributeError。
其他回答
您可以使用try-except块
try:
value = dict['keyname']
except IndexError:
value = None
您应该使用dict类中的get()方法
d = {}
r = d.get('missing_key', None)
这将导致r == None。如果在字典中没有找到键,get函数返回第二个参数。
使用dict.get
如果key在字典中,则返回key的值,否则为默认值。如果没有给出default,则默认为None,因此该方法永远不会引发KeyError。
不要再疑惑了。这是内置在语言中的。
>>> help(dict) Help on class dict in module builtins: class dict(object) | dict() -> new empty dictionary | dict(mapping) -> new dictionary initialized from a mapping object's | (key, value) pairs ... | | get(...) | D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. | ...
正如上面其他人所说,您可以使用get()。
但要检查密钥,你还可以这样做:
d = {}
if 'keyname' in d:
# d['keyname'] exists
pass
else:
# d['keyname'] does not exist
pass