我正在处理与API调用相关的内容,因此需要使用Python字典进行操作。
然而,对于同一请求,我并不总是使用相同的键,并且我想知道何时可以在没有异常的情况下调用一个键...
假设我有以下内容:
有时候键 d 存在,有时候不存在。有时候 c 甚至都不存在。
我想以某种方式检查 test['a']['b']['c']['d'] 是否存在,并且只使用一行代码。
我所尝试的:
1. 使用 test.get('a', {}).get('b', {}).get('c', {}).get('d', {})。它运行良好,但是很混乱,有时我有5-6个嵌套字典,名字非常长……
2. 使用 try/except 块非常好,但通常如果 test['a']['b']['c']['d'] 不存在,我将尝试调用 test['a']['b']['e']['f'] 来检查是否存在,因此我需要为我的每个 if 语句添加 try/catch,如果我没错的话,如果捕获到异常,则不再执行 try 块。
我也许试图寻找某种反射方式来做到这一点,使用“对象”名称作为字符串调用一个函数,该函数将检查每个键是否存在,如果存在,则返回对象本身。
有什么想法吗?
其背后的用途将是省略无用的情况,并假设有时信息在 test['a']['b']['c']['d'] 中,有时在 test['a']['b']['f'] 中:
如果我在那里放置一个try/except,第一个异常会停止执行并不允许我执行elif吗?
此外,我真的很喜欢调用
然而,对于同一请求,我并不总是使用相同的键,并且我想知道何时可以在没有异常的情况下调用一个键...
假设我有以下内容:
test = {'a':{'b':{'c':{'d':'e'}}}}
有时候键 d 存在,有时候不存在。有时候 c 甚至都不存在。
我想以某种方式检查 test['a']['b']['c']['d'] 是否存在,并且只使用一行代码。
我所尝试的:
1. 使用 test.get('a', {}).get('b', {}).get('c', {}).get('d', {})。它运行良好,但是很混乱,有时我有5-6个嵌套字典,名字非常长……
2. 使用 try/except 块非常好,但通常如果 test['a']['b']['c']['d'] 不存在,我将尝试调用 test['a']['b']['e']['f'] 来检查是否存在,因此我需要为我的每个 if 语句添加 try/catch,如果我没错的话,如果捕获到异常,则不再执行 try 块。
我也许试图寻找某种反射方式来做到这一点,使用“对象”名称作为字符串调用一个函数,该函数将检查每个键是否存在,如果存在,则返回对象本身。
有什么想法吗?
其背后的用途将是省略无用的情况,并假设有时信息在 test['a']['b']['c']['d'] 中,有时在 test['a']['b']['f'] 中:
if test['a']['b']['c']['d'] **exists**:
do sthg with the value of test['a']['b']['c']['d']
elif test['a']['b']['f'] **exists**:
do sthg else with the value of test['a']['b']['f']
else:
do sthg different
如果我在那里放置一个try/except,第一个异常会停止执行并不允许我执行elif吗?
此外,我真的很喜欢调用
test['a']['b']['c']['d']
的方式,比提供键列表更好。实际上,我希望它对我和将阅读/使用我的代码的人尽可能透明。
.get(key,{})
的原始方法,比答案更好。 - WestCoastProjects