1

私のデータベースは現在、辞書のリストを返します:

id_list = ({'id': '0c871320cf5111df87da000c29196d3d'}, 
           {'id': '2eeeb9f4cf5111df87da000c29196d3d'}, 
           {'id': '3b982384cf5111df87da000c29196d3d'}, 
           {'id': '3f6f3fcecf5111df87da000c29196d3d'}, 
           {'id': '44762370cf5111df87da000c29196d3d'}, 
           {'id': '4ba0d294cf5111df87da000c29196d3d'})

特定の ID がこのリストに含まれているかどうかを簡単に確認するにはどうすればよいですか?

ありがとう。

4

5 に答える 5

7

これがワンライナーです:

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

このように、リストは事前に完全な長さで生成されません。

于 2010-10-13T13:55:51.660 に答える
7

特定の ID がこのリストに含まれているかどうかを簡単に確認するにはどうすればよいですか?

セットを作る

keys = set( d['id'] for d in id_list )
if some_value in keys

これが「効率的」か「最善」かを尋ねないでください。これには、標準的なトレードオフが含まれます。

セットの構築には時間がかかります。しかし、ルックアップは瞬時に行われます。

  • 多くのルックアップを行う場合、セットを構築するコストはルックアップごとに償却されます。

  • ルックアップをほとんど行わないと、セットを構築するコストが ilike よりも高くなる可能性があります {'id':some_value} in id_list

于 2010-10-13T14:19:38.997 に答える
5

検索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'
于 2010-10-13T13:59:47.593 に答える
3
any(x.get('id')==given_id for x in id_list)

。。。ブール値を返します。効率?S.Lottの答えを参照してください

于 2010-10-13T14:13:19.903 に答える
2

リスト内包表記でフラット化し、次のように使用できます。

id in [d['id'] for d in id_list]

パフォーマンス特性が異なるジェネレーター式を使用することもできます (リストが巨大な場合はメモリ使用量が少なくなります)。

id in (d['id'] for d in id_list)
于 2010-10-13T13:54:23.967 に答える