我在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/

10-12 15:49