2015-08-05 4 views
0

Я пытаюсь отфильтровать объект, возвращающий список определенного атрибута. Посмотрите, что я пробовал:Объект фильтра, возвращающий атрибут

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? Я бы хотел, например, избегать использования map и filter.

+2

Лямбда должна быть логическим выражением, вы возвращаете значение 'Foo.b' –

ответ

3

Вы можете использовать список понимание

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

Использование filter было бы сделать два шага: один, чтобы отфильтровать объекты, где i.a != 1 и второй, чтобы вытащить .b из каждого объекта (что потребует map) ,

Смежные вопросы