質問

私のデータベースは現在、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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top