2010-04-29 15 views
35

tengo una uniforme lista de objetos en Python:lista Extracto de los atributos de la lista de objetos en Python

class myClass(object): 
    def __init__(self, attr): 
     self.attr = attr 
     self.other = None 

objs = [myClass (i) for i in range(10)] 

Ahora quiero extraer una lista con algunos atributos de esa clase (digamos attr) , con el fin de transmitirla de manera alguna función (para el trazado de los datos, por ejemplo)

Cuál es la forma de hacerlo Pythonic,

attr=[o.attr for o in objsm] 

?

lista Quizás derivar y agregar un método a la misma, para que pueda utilizar algún lenguaje como

objs.getattribute("attr") 

?

+0

Ver duplicado http://stackoverflow.com/q/677656/127465, esp. la respuesta con operator.attrgetter – ThomasH

Respuesta

25

También puede escribir:

attr=(o.attr for o in objsm) 

esta manera se obtiene un generador que conserva la memoria. Para obtener más beneficios, consulte Generator Expressions.

47

attrs = [o.attr for o in objs] era el código correcto para hacer una lista como la que usted describe. No intente crear la subclase list para esto. ¿Hay algo que no te gustó de ese fragmento?

+1

Solo que es demasiado detallado y voy a usarlo a menudo, por lo que un atajo sería útil. matrices estructuradas numpy arr ['colname'] o recarrays arr.colname, ya proporcionan algo similar, pero en este caso estoy usando objetos que contienen datos con nombre (y algunas funciones). – franjesus

Cuestiones relacionadas