小编use*_*262的帖子

检查嵌套字典中的密钥是否存在

我正在使用API​​调用,因此使用Python字典.

但是,对于相同的请求,我并不总是键入相同的键,我想知道何时可以在没有异常的情况下调用键...

让我说我有

test = {'a':{'b':{'c':{'d':'e'}}}}
Run Code Online (Sandbox Code Playgroud)

有时密钥d会存在,有时则不会.有时c甚至不存在.

我想以某种方式test['a']['b']['c']['d']在一行中检查是否存在.

到目前为止我尝试过的:

  • test.get('a', {}).get('b', {}).get('c', {}).get('d', {}).工作正常,但它是一个烂摊子,有时我有5-6个嵌套的词典,名字很长......

  • 使用try/except块很好,但通常如果test['a']['b']['c']['d']不存在,我会尝试调用test['a']['b']['e']['f']检查是否存在,因此我需要为每个if语句添加一个try/catch,就好像我没有错,如果异常是catch,则不再执行try块.

我可能试图寻找一种反身的方式来做这件事,调用一个函数,将我的"对象"的名称作为字符串,检查每个键是否存在,如果存在,则返回对象本身.

有什么想法吗 ?

它背后的用法是,省略无用的情况,并假设有时信息在测试['a'] ['b'] ['c'] ['d'],有时在测试['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
Run Code Online (Sandbox Code Playgroud)

如果我把try/except放在那里,第一个异常不会停止执行并且不让我执行elif吗?

而且,我真的很喜欢打电话的方式而test['a']['b']['c']['d']不是给出一个按键列表.事实上,我希望它对我和那些阅读/使用我的代码的人们尽可能透明.

谢谢 !

python json

7
推荐指数
1
解决办法
1346
查看次数

标签 统计

json ×1

python ×1