检查变量是否不为None且是否为包含特定键的字典

时间:2018-08-21 12:38:06

标签: python python-3.x

我目前发现自己要写一些类似的代码

if myDict is not None:
    if 'thisKey' in myDict:
        variable = myDict['thisKey']

我首先检查是否定义了myDict,然后访问密钥(如果已定义)。这些测试是否有捷径或更Python化的方式?

我主要是想将两个if子句结合起来;我知道我还没有使用get方法,例如像variable = myDict.get('thisKey')一样,因此可以简化/缩短为

if myDict is not None:
    variable = myDict.get('thisKey')

但是,它可以变得更加简洁/容易吗?查询键“无”会引发错误。

为此,我们可以安全地假设变量(如果已定义)将是一个字典。

3 个答案:

答案 0 :(得分:2)

这些东西怎么样?

if myDict and 'thisKey' in myDict:
    variable = myDict['thisKey']

variable = myDict.get('thisKey', None) if myDict else None

答案 1 :(得分:1)

您应该看看default dictionaries,它们允许您设置默认值,因此,如果您尝试访问不存在的键,则字典不会引发异常。

答案 2 :(得分:1)

仅尝试普通情况并捕获异常通常比considered more pythonic要先对罕见的极端情况进行明确测试:

try:
    variable = myDict.get('thisKey')
except AttributeError:  # when myDict is None
    variable = None

这并不短,但是在我看来,这比试图将内容塞入一行更清晰。如果要重复多次这些行,则可以编写一个小函数:

def my_get(dictionary, key, default=None):
    """lookup key in dictionary. Returns default
    when key is missing or dictionary is None"""
    try:
        return dictionary.get(key, default)
    except AttributeError:  # when dictionary is None
        return default

快速测试:

In [19]: myDict = None
In [20]: my_get(myDict, 'key', 5)
Out[20]: 5

In [21]: myDict = {}
In [22]: my_get(myDict, 'key', 5)
Out[22]: 5

In [23]: myDict = dict(key=66)
In [24]: my_get(myDict, 'key', 5)
Out[24]: 66