搜索python列表的最简单方法是什么?
-
29-09-2019 - |
题
我的数据库目前返回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)
不隶属于 StackOverflow