Ordenamiento de lista de diccionarios

Marcos Sánchez Provencio rapto en arrakis.es
Dom Jul 16 16:50:50 CEST 2006


Mejor en este caso usar key:
>> Necesito ordenar por tres llaves del diccionario a - descendente, b -
> >> ascendente y c - ascendente.


>>> l=[{'a': 1, 'c': 'a', 'b': 1}, {'a': 2, 'c': 'a', 'b': 2}, {'a': 2,
'c': 'b', 'b': 2}, {'a': 2, 'c': 'b', 'b': 4}, {'a': 3, 'c': 'a', 'b':
2}, {'a': 7, 'c': 's', 'b': 1}]
>>> l.sort(key=lambda d:(-d['a'],d['b'],d['c']))
>>> l
[{'a': 7, 'c': 's', 'b': 1}, {'a': 3, 'c': 'a', 'b': 2}, {'a': 2, 'c':
'a', 'b': 2}, {'a': 2, 'c': 'b', 'b': 2}, {'a': 2, 'c': 'b', 'b': 4},
{'a': 1, 'c': 'a', 'b': 1}]

(que supongo que será correcto, pero me he quedado bizco mirando tanta
llave y comilla)

El dom, 16-07-2006 a las 16:18 +0200, Alexis Roda escribió:
> En/na Marcos Sánchez Provencio ha escrit:
> > El vie, 14-07-2006 a las 13:28 -0500, yanetr en cimex.com.cu escribió:
> >> Hola listeros:
> >>
> >>  
> >>
> >> Ante todo mis saludos y felicidades por una lista tan buena. 
> >>
> >> Trabajo en un proyecto que usa python 2.4 sobre la plataforma Windows,
> >> tengo una duda y necesito saber si me pueden ayudar?
> >>
> >>  
> >>
> >> Necesito ordenar una lista que contiene diccionarios.
> >>
> >>>>> l
> >> [{'a': 3, 'c': 'a', 'b': 2}, {'a': 2, 'c': 'b', 'b': 4}, {'a': 1, 'c':
> >> 'a', 'b': 1}, {'a': 7, 'c': 's', 'b': 1}, {'a': 2, 'c': 'b', 'b': 2},
> >> {'a': 2, 'c': 'a', 'b': 2}]
> >>
> >>  
> >>
> >> Necesito ordenar por tres llaves del diccionario a - descendente, b -
> >> ascendente y c - ascendente.
> >>
> >> El resultado del ordenamiento me quedaria asi:
> >>
> >>>>> l
> >> [{'a': 7, 'c': 's', 'b': 1}, {'a': 3, 'c': 'a', 'b': 2}, {'a': 2, 'c':
> >> 'a', 'b': 2}, {'a': 2, 'c': 'b', 'b': 2}, {'a': 2, 'c': 'b', 'b': 4},
> >> {'a': 1, 'c': 'a', 'b': 1}]
> >>
> >>  
> >>
> >> El metodo sort() hasta donde se, no me sirve:
> >>
> >>>>> l.sort()
> >>>>> l
> >> [{'a': 1, 'c': 'a', 'b': 1}, {'a': 2, 'c': 'a', 'b': 2}, {'a': 2, 'c':
> >> 'b', 'b': 2}, {'a': 2, 'c': 'b', 'b': 4}, {'a': 3, 'c': 'a', 'b': 2},
> >> {'a': 7, 'c': 's', 'b': 1}]
> >>
> >>  
> >>
> >> Alguien me da una ayuda?
> 
> sort admite como parametro una funcion que sirve para comparar. Esta 
> funcion se comporta igual que 'cmp':
> 
> ~$ python
> Python 2.4.2 (#2, Sep 30 2005, 21:19:01)
> [GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>  >>> help(list.sort)
> Help on method_descriptor:
> 
> sort(...)
>      L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
>      cmp(x, y) -> -1, 0, 1
> 
>  >>> help(cmp)
> Help on built-in function cmp in module __builtin__:
> 
> cmp(...)
>      cmp(x, y) -> integer
> 
>      Return negative if x<y, zero if x==y, positive if x>y.
> 
> 
> Saludos
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es




Más información sobre la lista de distribución Python-es