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 回答