我的数据库当前返回一个dicts列表:
id_list = ({'id': '0c871320cf5111df87da000c29196d3d'},
{'id': '2eeeb9f4cf5111df87da000c29196d3d'},
{'id': '3b982384cf5111df87da000c29196d3d'},
{'id': '3f6f3fcecf5111df87da000c29196d3d'},
{'id': '44762370cf5111df87da000c29196d3d'},
{'id': '4ba0d294cf5111df87da000c29196d3d'})
如何轻松检查给定ID是否在此列表中?
感谢。
答案 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)