我有一系列相同的词典
list_dict = [{'id': 1}, {'id': 2}, {'id': 3}]
现在我想过滤一个id为id = id
的字段的特定字典我做
list_filtered = [ dict for dict in list_dict if dict['id'] == 2]
上面的解决方案有效,但是如果我有一个很长的列表,那么迭代整个列表并检查id是否匹配将是低效的。还有其他解决方法吗?
答案 0 :(得分:1)
使它成为一个生成器表达式并一次获得一个匹配,如此
matcher = (d for d in list_dict if d['id'] == 2)
print next(matcher, None)
当您在同一个生成器对象上调用next
时,它将从最后一次离开的位置恢复循环。
print next(matcher, None)
next
的第二个参数是生成器表达式用尽时返回的默认值。
答案 1 :(得分:0)
Python提供了一个功能过滤器:
filter(lambda x: x["id"]==2,list_dict)
您还可以使用itertools
包提供的迭代器:
itertools.ifilter(lambda x: x["id"] ==2, list_dict)
ifilter
将应用按元素传递的函数。
如果您希望迭代在第一场比赛中停止,您可以尝试以下内容:
itertools.dropwhile(lambda x: x["id"] !=2, list_dict).next()