过滤字典列表

时间:2014-06-10 07:10:41

标签: python list dictionary

我有一系列相同的词典

list_dict = [{'id': 1}, {'id': 2}, {'id': 3}]

现在我想过滤一个id为id = id

的字段的特定字典

我做

list_filtered = [ dict for dict in list_dict if dict['id'] == 2]

上面的解决方案有效,但是如果我有一个很长的列表,那么迭代整个列表并检查id是否匹配将是低效的。还有其他解决方法吗?

2 个答案:

答案 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()