过滤器返回属性的对象

时间:2015-08-05 13:45:29

标签: python filter

我正在尝试过滤返回特定属性列表的对象。看看我尝试过的东西:

class Foo:
    def __init__(self,a,b):
        self.a = a
        self.b = b

x = Foo(1,2)
y = Foo(1,3)
z = Foo(2,4) 
result = filter(lambda f: f.b if f.a == 1 else None, [x,y,z])
print(list(result))

我期待一个像[2, 3]这样的列表,但它会返回一个foo个对象的列表。有没有办法只使用filter其他功能?例如,我想避免使用mapfilter

1 个答案:

答案 0 :(得分:4)

您可以使用列表理解

result = [i.b for i in [x,y,z] if i.a == 1]

使用filter需要两个步骤:一个用于过滤掉i.a != 1的对象,第二个用于从每个对象中提取.b(这需要map })。