PythonのDICTのリストを検索する最も簡単な方法は何ですか?
-
29-09-2019 - |
質問
私のデータベースは現在、dictsのリストを返しています。
id_list = ({'id': '0c871320cf5111df87da000c29196d3d'},
{'id': '2eeeb9f4cf5111df87da000c29196d3d'},
{'id': '3b982384cf5111df87da000c29196d3d'},
{'id': '3f6f3fcecf5111df87da000c29196d3d'},
{'id': '44762370cf5111df87da000c29196d3d'},
{'id': '4ba0d294cf5111df87da000c29196d3d'})
特定のIDがこのリストにあるかどうかを簡単に確認できますか?
ありがとう。
解決
検索IDの辞書を作成した場合、
search_dic = {'id': '0c871320cf5111df87da000c29196d3d'}
id_list = ({'id': '0c871320cf5111df87da000c29196d3d'},
{'id': '2eeeb9f4cf5111df87da000c29196d3d'},
{'id': '3b982384cf5111df87da000c29196d3d'},
{'id': '3f6f3fcecf5111df87da000c29196d3d'},
{'id': '44762370cf5111df87da000c29196d3d'},
{'id': '4ba0d294cf5111df87da000c29196d3d'})
if search_dic in id_list:
print 'yes'
他のヒント
これがワンライナーです:
if some_id in [d.get('id') for d in id_list]:
pass
しかし、あまり効率的ではありません。
編集 - より良いアプローチは次のとおりです。
if some_id in (d.get('id') for d in id_list):
pass
これにより、リストは事前に完全に生成されません。
特定のIDがこのリストにあるかどうかを簡単に確認できますか?
セットを作成します
keys = set( d['id'] for d in id_list )
if some_value in keys
これが「効率的」か「最良」かを尋ねないでください。標準のトレードオフが含まれます。
セットを構築するには時間がかかります。しかし、ルックアップは瞬時です。
多くの検索を行うと、セットを構築するコストは、各ルックアップで償却されます。
ルックアップが少ない場合、セットを構築するコストはilikeよりも高い場合があります
{'id':some_value} in id_list
.
any(x.get('id')==given_id for x in id_list)
. 。 。 。ブールを返します。効率? S.Lottの答えを参照してください
あなたはそれをリスト理解で平らにし、次のことを使用できます。
id in [d['id'] for d in id_list]
また、異なるパフォーマンス特性を持つジェネレーター式を使用することもできます(リストが巨大な場合は、メモリを使用します):
id in (d['id'] for d in id_list)
所属していません StackOverflow