我需要一种方法来获取字典值(如果它的键存在),或者简单地返回None,如果它不存在。
但是,KeyError如果您搜索不存在的键,Python会引发异常。我知道我可以检查密钥,但是我正在寻找更明确的密钥。None如果密钥不存在,是否有办法返回?
我需要一种方法来获取字典值(如果它的键存在),或者简单地返回None,如果它不存在。
但是,KeyError如果您搜索不存在的键,Python会引发异常。我知道我可以检查密钥,但是我正在寻找更明确的密钥。None如果密钥不存在,是否有办法返回?
Answers:
您可以使用 dict.get()
value = d.get(key)None如果将返回key is not in d。您还可以提供将返回的其他默认值,而不是None:
value = d.get(key, "empty")None如果键None在dict中显式映射到默认变体的第二个变体仍将返回。如果这不是您想要的,可以使用d.get(key) or "empty"。
                    [],"",False,0.0或事实上None),那么你的解决方案将始终返回0。如果希望将Nones作为值,则必须if key in d:显式地进行检查。
                    "empty"如果key不是有效的键,则返回d。它与key映射到的值无关。
                    如果您想要一个更透明的解决方案,则可以继承dict此行为:
class NoneDict(dict):
    def __getitem__(self, key):
        return dict.get(self, key)
>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
'asdf'
>>> foo[2]
'qwerty'
>>> foo[3] is None
True
defaultdict是,每当请求一个尚不存在的元素时,它将增加。这并不总是可取的。
                    foo['bar']['test']['sss']要返回None而不是例外,经过一段深度后,它开始给予TypeError而不是KeyError
                    NoneDicts。如果这将在KeyError最里面的对象中发生,这将有所帮助。否则问题是,一旦返回None对象,您将无法再订阅它。一个丑陋的破解方法是返回另一个测试类似的对象None。但是请注意,这可能会导致可怕的错误。
                    return dict.get(self, key)为return super().get(key)吗?然后,例如,如果我决定使用OrderedDict而不是dict,则不必担心更改多行代码。
                    我通常在这种情况下使用defaultdict。您提供一个不带任何参数的工厂方法,并在看到新键时创建一个值。当您想在新键上返回空列表之类的功能时,它会更有用(请参见示例)。
from collections import defaultdict
d = defaultdict(lambda: None)
print d['new_key']  # prints 'None'
defaultdict是,每次请求不存在的元素时,它将保持增长。
                    一线解决方案是:
item['key'] if 'key' in item else None在尝试将字典值添加到新列表并想要提供默认值时,这很有用:
例如。
row = [item['key'] if 'key' in item else 'default_value']就像其他人说的那样,您可以使用get()。
但是要检查密钥,您也可以执行以下操作:
d = {}
if 'keyname' in d:
    # d['keyname'] exists
    pass
else:
    # d['keyname'] does not exist
    passget方法的原因。
                    
.get(key)的不是[key]