1. ホーム
  2. python

[解決済み] Python filter list of dictionaries based on key value (辞書のリストをキーの値でフィルタリングする)

2023-01-22 21:20:56

質問

辞書のリストがあり、各辞書は(仮に)'type'のキーを持ち、そのキーは以下の値を持つことができます。 'type1' , 'type2' などです。私の目標は、これらの辞書をフィルタリングして、同じ辞書のリストにすることですが、特定の "type" のものだけを抽出することです。私はちょうど私が本当に苦労していると思う list/dictionary 理解することです。

ということで、リストの例は次のようになります。

exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]

キーバリューのリストがあります。

keyValList = ['type2','type3']

ここで、期待される結果のリストは次のようになります。

expectedResult = [{'type':'type2'},{'type':'type2'},{'type':'type3'}]

私は、一連のforループでこれを行うことができることを知っています。私はこの質問の多くの異なるフレーバーを見つけましたが、本当に法案に適合し、質問に答えるものはありませんでした。私は答えの試みを投稿しますが...それらはそれほど印象的ではありませんでした。おそらく、それをオープンエンドのままにするのが最善です。

どのように解決するのですか?

リストコンプを試すことができます。

>>> exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]
>>> keyValList = ['type2','type3']
>>> expectedResult = [d for d in exampleSet if d['type'] in keyValList]
>>> expectedResult
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]

もう一つの方法は filter

>>> list(filter(lambda d: d['type'] in keyValList, exampleSet))
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]