如果字典中不存在某个键,返回默认值。

760

如果键存在,我需要一种获取字典值的方法,否则只返回None

然而,如果搜索不存在的键,Python会引发一个KeyError异常。我知道我可以检查键是否存在,但我正在寻找更明确的方法。是否有一种方式,如果键不存在,就只返回None


另请参阅:为什么使用 dict.get(key) 而不是 dict[key]?


123
请使用.get(key)代替[key] - Gabe
3
在Python中,访问键并捕获异常是完全可以的。这甚至是一个广为人知且经常使用的设计模式。如果你返回None,就无法将其作为值存储,这在某些情况下可能很重要。 - Ber
1
有时候你想把字典中的“None”条目和缺失的条目视为同一种情况,这种情况下接受的答案似乎可以很好地完成工作。 - cib
15个回答

1
  1. d1={"One":1,"Two":2,"Three":3}

  2. d1.get("Four")

如果您运行此代码,将不会出现“Keyerror”,这意味着您可以使用“dict.get()”来避免错误并执行您的代码。

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0
你可以使用try-except代码块。
try:
    value = dict['keyname']

except IndexError:
    value = None

0

Python2和Python3的差异让我大吃一惊。我会基于我在Python3中所做的内容进行回答。我的目标很简单:检查字典格式的JSON响应是否出现错误。我的字典名为“token”,我要查找的关键字是“error”。我正在寻找关键字“error”,如果它不存在,则将其设置为None的值,然后检查值是否为None,如果是,则继续执行我的代码。否则语句将处理如果我有关键字“error”的情况。

if ((token.get('error', None)) is None):
    do something

0
如果您有一个更复杂的需求,需要使用缓存,那么这个类可能会很有用:
class Cache(dict):
    """ Provide a dictionary based cache

        Pass a function to the constructor that accepts a key and returns
        a value.  This function will be called exactly once for any key
        required of the cache.
    """

    def __init__(self, fn):
        super()
        self._fn = fn

    def __getitem__(self, key):
        try:
            return super().__getitem__(key)
        except KeyError:
            value = self[key] = self._fn(key)
            return value

构造函数接受一个函数作为参数,该函数将使用键调用并返回字典的值。然后将该值存储,并在下一次从字典中检索。使用方法如下...
def get_from_database(name):
    # Do expensive thing to retrieve the value from somewhere
    return value

answer = Cache(get_from_database)
x = answer(42)   # Gets the value from the database
x = answer(42)   # Gets the value directly from the dictionary

-5

如果你可以使用False完成它,那么还有hasattr内置函数:

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

请不要考虑最受欢迎的内容。 - Phteven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接