我目前发现自己要写一些类似的代码
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')
但是,它可以变得更加简洁/容易吗?查询键“无”会引发错误。
为此,我们可以安全地假设变量(如果已定义)将是一个字典。
答案 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