过滤对象返回一个属性

3

我正在尝试过滤一个对象,返回一个特定属性的列表。看看我尝试了什么:

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


2
Lambda应该是一个布尔表达式,你正在返回Foo.b的值。 - Peter Wood
1个回答

7
你可以使用列表推导式。
result = [i.b for i in [x,y,z] if i.a == 1]

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接