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