1

Python でJMESPathを使用して、大きな辞書/リストを効率的に解析しています。

辞書のリストがあります。辞書ごとに、特定の値を取得するかnull、結果をリストに入れたいと考えています。つまり、各辞書からフィールドを選択していますが、フィールドが存在しない場所に 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||``][]

最初の 2 つの項[*][foo.bar||``]は、各要素を list にネストされたリストに配置し[['yes1'], ['yes2'], ['']][]返されたリストを平坦化します。ただし、これは非常に複雑で、null を返すことができないため、代わりに空の文字列を返します。

誰にもアイデアはありますか?構文的に何かが欠けていますか?

4

1 に答える 1

2

JMESPATH 0.9 以降、map関数が追加されました。したがって、次の式を使用して目的の結果を得ることができます。

map(&foo.bar, [*])
于 2015-10-08T10:14:22.657 に答える