我的数据库目前返回dict的列表:

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