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

ens*_*are 1 python python-datamodel

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

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

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

谢谢.

sle*_*ica 7

这是一个单行:

if some_id in [d.get('id') for d in id_list]:
    pass
Run Code Online (Sandbox Code Playgroud)

虽然不是很有效率.

编辑 - 更好的方法可能是:

if some_id in (d.get('id') for d in id_list):
    pass
Run Code Online (Sandbox Code Playgroud)

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


S.L*_*ott 7

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

做一套

keys = set( d['id'] for d in id_list )
if some_value in keys
Run Code Online (Sandbox Code Playgroud)

不要问这是"有效"还是"最好".它涉及标准权衡.

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

  • 如果进行大量查找,则构建集合的成本将在每次查找时分摊.

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


joa*_*uin 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'
Run Code Online (Sandbox Code Playgroud)