2012-02-01 16 views
14

Necesito cargar una lista de objetos de fila de base de datos en la memoria, y luego tomar una de esas filas por su ID único. ¿Hay una manera limpia y pitonica de encontrar un solo objeto de una lista por un valor de atributo? ¿O solo hago un bucle y comparo?Obtener lista elemento por atributo en Python

+2

¿Hay una razón para no hacer esto directamente con una consulta de base de datos? – Avaris

+0

Es solo un ejemplo – Yarin

Respuesta

11

Sí, bucle y compara:

items = [item for item in container if item.attribute == value] 

y obtiene nuevamente una lista que puede ser probado para ver cuántos has encontrado.

Si va a hacer esto mucho, considere el uso de un diccionario, donde la clave es el atributo que le interesa.

4

Puede filter:

matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects) 

Remítase a la respuesta de Kindall para el asesoramiento sobre la eficiencia. Si estás haciendo esto mucho, no es el camino correcto.

+0

¿cuál sería la forma correcta de hacerlo de manera eficiente? Gracias. – moeseth

12

Si hace esto sólo da el primer partido, en lugar de comparar la lista completa: find first sequence item that matches a criterion.

Si haces algo como esto, usted no tiene que coger la excepción sino conseguir None lugar:

item = next((i for i in items if i == 'value'), None) 
Cuestiones relacionadas