是否有更可读的方法来检查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,您必须相信它是easier to ask for forgiveness than permission
答案
下面是我如何处理嵌套的dict键:
例如:
输出:
它在给定的
element
中循环,按给定的顺序测试每个键与我找到的所有
variable.get('key', {})
方法相比,我更喜欢这个方法,因为它遵循EAFP函数,但要调用的函数除外,如:
keys_exists(dict_element_to_test, 'key_level_0', 'key_level_1', 'key_level_n', ..)
。至少需要两个参数,元素和一个键,但可以添加所需的键数如果需要使用某种类型的地图,可以执行以下操作:
“尝试/例外”似乎是实现这一点的最具python风格的方式。
以下递归函数应该可以工作(如果在dict中找不到其中一个键,则返回None):
可以将
.get
与默认值一起使用:但这几乎肯定不如使用try/except清晰
相关问题 更多 >
编程相关推荐