我有一个对象列表,我从中筛选出在单个属性中具有特定值的对象:
import itertools
iterator = itertools.ifilter(lambda record: record.outcome==1, list)
迭代器现在拥有outcome = 1
但是,它们现在在另一个属性order=X
我想将迭代器分为两部分:一部分用于那些order = 1
和另一个order > 1
是否有另一种方法,而不是循环遍历所有元素并将它们添加到两个列表/列表理解中的一个?
说我有一个l
列表obj1,obj2,obj3
作为内容obj1.order=1
,obj2.order=2
和obj3.order=3
我想要a # containing obj1
和b # containing obj2 & obj3
最好,我想有两个其他的迭代器,这样我就可以处理部分列表,无论我想做什么!
我在考虑itertools.groupby
,但由于我的变量order=X
有许多可能的值,它会给我两个以上的子迭代器!
答案 0 :(得分:0)
使用tee
和ifilter
。您并不一定需要tee
,但如果原始迭代器很昂贵,它可能会提高效率。
import itertools
iter_outcome = itertools.ifilter(lambda record: record.outcome==1, list)
a, b = itertools.tee(iter_outcome, 2)
iter_order_1 = itertools.ifilter(lambda record: record.order == 1, a)
iter_greater_1 = itertools.ifilter(lambda record: record.order > 1, b)