我在Python中使用JMESPath来有效地解析大型词典/列表。
我有一个字典列表,我想为每个字典获取某个值或返回null并将结果放入列表中。即我从每个字典中选择一个字段,但在该字段不存在的地方包含一个空值。
例如,我的输入是:
[
{
'foo': {'bar': 'yes1'}
},
{
'foo': {'bar': 'yes2'}
},
{
'foo1': {'bar': 'no'}
}
]
我想要的结果是:
['yes1', 'yes2', None]
因此,对于列表中的每个字典,我需要路径
foo.bar
或如果路径不存在,我想返回None
。我想要的伪JMESPath表达式是:[*]( foo.bar||`null` )
即选择所有列表,然后尝试路径foo.bar或返回原义的null。但是,括号在语法上不正确。如何将OR表达式封装在方括号中?我得到的最好的JMESPath表达式是:
[*][foo.bar||``][]
前两个术语
[*][foo.bar||``]
将每个元素放入嵌套在列表[['yes1'], ['yes2'], ['']]
中的列表中,然后[]
展平返回的列表。但是,这非常麻烦,并且阻止了我返回空值,因此我返回了一个空字符串。有人有什么想法吗?我在语法上缺少什么吗?
先谢谢了。
最佳答案
从JMESPATH 0.9开始,添加了map
function。现在,您可以使用以下表达式获得所需的结果:
map(&foo.bar, [*])
关于python - JMESPath嵌套OR语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32612193/