2011-01-21 17 views
5

hola tengo lista de diccionarios .. y quiero resolverlo entre mayúsculas y minúsculaslista de clasificación entre mayúsculas y minúsculas usando operator.attrgetter

members = Person.objects.filter(person=person_id) 
members_list = list(members) 

members_list.sort(key = operator.attrgetter(sort_by), reverse = False) 

aquí sort_by tienen atributo de nombre por el cual quiero ordenar. Ahora, ¿cómo puedo ordenar con mayúsculas y minúsculas?

favor ayuda ..

Respuesta

4

Si sort_by es una variable que contiene una cadena con el nombre del atributo que desea utilizar para la clasificación y desea utilizar operator.attrgetter(), podría utilizar esto lo que convierte el valor del atributo se obtiene a todos los caracteres en minúsculas para las comparaciones durante la clase:

members_list.sort(key = lambda mbr: operator.attrgetter(sort_by)(mbr).lower(), 
        reverse = False) 

Aunque algo como lo siguiente es más fácil de leer, así como más eficiente:

get_key = operator.attrgetter(sort_by) 
members_list.sort(key = lambda mbr: get_key(mbr).lower(), reverse = False) 
+0

gracias señor está trabajando :) – Ahsan

+0

@Ahsan: De nada ... y por supuesto funcionó ;-) – martineau

6
members_list.sort(key = lambda member: getattr(member,sort_by).lower(), reverse = False) 
+0

+1 * * Este es un caso de uso válido para 'cordero da' (irónicamente, no usarías una lambda para esto en un lenguaje funcional, donde tienes herramientas como el punto '(f.g) (x) = f (g (x))'). Pero necesitas 'getattr (member, sort_by)'. – delnan

+0

sort_by es mi variable que tiene nombre de atributo. – Ahsan

+0

@Ahsan, vale, no entendí bien. He actualizado mi respuesta. –

1

parece que esta pregunta se refiere a Django. Es posible que desee pensar en devolver un conjunto de preguntas ordenadas en su lugar. Esto significa que también puede dejar la clasificación en la base de datos y no molestarse con ella. Ver este sitio: django

+0

tiene razón, pero aquí en member_list también tengo algunos valores clave foriegn, a través de una relación inversa. también necesito los de esta lista. entonces en la consulta no puedo usar order_by. – Ahsan

+0

por esta razón utilicé el método anterior para ordenar la lista. – Ahsan

+0

A menudo puede ser más económico ordenar python en lugar de DB, especialmente para columnas no indexadas. –

Cuestiones relacionadas