Ordenamiento de lista de diccionarios

Alexis Roda alexis.roda.villalonga en gmail.com
Dom Jul 16 16:18:01 CEST 2006


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




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