首页 文章

如果字典键不可用,则返回None

提问于
浏览
340

如果它的键存在,我需要一种获取字典值的方法,或者只是返回 None ,如果不存在的话 .

但是,如果搜索不存在的密钥,Python会引发 KeyError 异常 . 我知道我可以检查密钥,但我正在寻找更明确的东西 . 如果密钥不存在,有没有办法只返回 None

11 回答

  • 16

    如果您需要更透明的解决方案,可以继承 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
    
  • 15

    您可以使用 dict 对象的 get() 方法,正如其他人已经建议的那样 . 或者,根据您正在做的事情,您可以使用这样的 try/except 套件:

    try:
       <to do something with d[key]>
    except KeyError:
       <deal with it not being there>
    

    这被认为是处理案件的非常“Pythonic”方法 .

  • 55

    您可以通过继承dict来覆盖 __missing__(self, key) 并返回None .

    class MyDict(dict):
        def __missing__(self, key):
            return None
    
  • 581

    你可以用get()

    value = d.get(key)
    

    如果 key is not in d 将返回 None . 您还可以提供将返回的其他默认值,而不是 None

    value = d.get(key, "empty")
    
  • 21

    正如其他人上面所说,你可以使用get() .

    但要检查密钥,您还可以:

    d = {}
    if 'keyname' in d:
    
        # d['keyname'] exists
        pass
    
    else:
    
        # d['keyname'] does not exist
        pass
    
  • 4

    对于这样的情况,我通常使用defaultdict . 您提供了一个不带参数的工厂方法,并在看到新键时创建一个值 . 当你想要在新键(see the examples)上返回类似空列表的内容时,它会更有用 .

    from collections import defaultdict
    d = defaultdict(lambda: None)
    print d['new_key']  # prints 'None'
    
  • -2

    一线解决方案是:

    item['key'] if 'key' in item else None
    

    这在尝试将字典值添加到新列表并希望提供默认值时非常有用:

    例如 .

    row = [item['key'] if 'key' in item else 'default_value']
    
  • 4

    如果你能用 False 做,那么,还有hasattr内置功能:

    e=dict()
    hasattr(e, 'message'):
    >>> False
    
  • -1

    不要再想了 . 它内置于语言中 .

    >>> 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.
         |  
        ...
    
  • 2

    使用dict.get

  • 10

    您应该使用 dict 类中的 get() 方法

    d = {}
    r = d.get( 'missing_key', None )
    

    这将导致 r == None . 如果在字典中找不到密钥,则get函数返回第二个参数 .

相关问题