是否有更可读的方法来检查dict中是否存在密钥,而不单独检查每个级别?
假设我需要在隐藏的对象中获取此值(从Wikidata获取的示例):
x = s['mainsnak']['datavalue']['value']['numeric-id']
要确保这不会以运行时错误结束,必须检查每个级别,如下所示:
if 'mainsnak' in s and 'datavalue' in s['mainsnak'] and 'value' in s['mainsnak']['datavalue'] and 'nurmeric-id' in s['mainsnak']['datavalue']['value']:
x = s['mainsnak']['datavalue']['value']['numeric-id']
另一种解决方法是将它包装成一个try catch
结构,对于这样一个简单的任务来说,我觉得这个结构也相当笨拙。
我在找这样的东西:
x = exists(s['mainsnak']['datavalue']['value']['numeric-id'])
如果所有级别都存在,则返回True
。
尝试/除了似乎是最Python式的方法。
以下递归函数应该可以工作(如果在dict中找不到某个键,则返回None):
默认情况下可以使用
.get
:但这几乎肯定比使用try/except要不清楚。
简而言之,对于Python,您必须相信它是easier to ask for forgiveness than permission
答案
下面是我如何处理嵌套的dict键:
示例:
输出:
它按给定的顺序循环测试每个键。
比起我找到的所有
variable.get('key', {})
方法,我更喜欢它,因为它遵循EAFP。函数的调用方式如下:
keys_exists(dict_element_to_test, 'key_level_0', 'key_level_1', 'key_level_n', ..)
。至少需要两个参数,元素和一个键,但可以添加所需的键数。如果需要使用某种地图,可以执行以下操作:
相关问题 更多 >
编程相关推荐