在Python中搜索dicts列表的最简单方法是什么?

时间:2010-10-13 13:50:49

标签: python python-datamodel

我的数据库当前返回一个dicts列表:

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

如何轻松检查给定ID是否在此列表中?

感谢。

5 个答案:

答案 0 :(得分: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

这样,列表不会事先生成全长。

答案 1 :(得分:7)

  

如何轻松检查给定ID是否在此列表中?

制作一套

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

不要问这是“有效”还是“最佳”。它涉及标准权衡。

构建集需要时间。但是查找是即时的。

  • 如果进行大量查询,构建集合的成本将在每次查找时摊销。

  • 如果您进行少量查找,构建该集合的成本可能高于ilike {'id':some_value} in id_list

答案 2 :(得分: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'

答案 3 :(得分:3)

any(x.get('id')==given_id for x in id_list)

。 。 。返回布尔值。效率?请参阅S.Lott的回答

答案 4 :(得分:2)

您可以使用列表解析来展平它并在以下位置使用:

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

您还可以使用具有不同性能特征的生成器表达式(如果列表很大,将使用更少的内存):

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