检查变量是否不是None,是否是包含特定键的dict

2024-09-30 16:36:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在发现自己写了几次这样的代码

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')

然而,它能变得更简洁/更容易吗?查询“None”以查找键会引发错误。你知道吗

为此,我们可以安全地假设变量是dict,如果它被定义的话。你知道吗


Tags: 代码innone类型getif定义is
3条回答

像这样的怎么样?你知道吗

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

或者

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

只需尝试常见情况并捕获异常通常比首先显式测试罕见的拐角情况要好得多:

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

您应该看看default dictionaries,它们允许您设置默认值,这样当您试图访问不存在的键时,您的字典不会抛出异常。你知道吗

相关问题 更多 >