[pyar] Ordenamiento diccionarios

Pablo Ziliani pablo en kultroom.com
Mie Abr 13 21:58:13 ART 2011


On 04/13/2011 12:38 PM, Natalia Gutierrez wrote:
> Hola lista! mi consulta es la siguiente: tengo un diccionario
> diccionario ={1:"Baño",2:"Batata",3:"bolsa",4:"Bata"}
(...)
> y lo que yo pretendo que me devuelva es:
> [(3, 'bolsa'), (1, 'Baño'), (4, 'Bata'), (2, 'Batata')]

*Creo* que lo que querés viene por este lado:

 >>> locale.getlocale()
('en_US', 'UTF8')
 >>> locale.setlocale(locale.LC_ALL, ('es_AR', 'UTF8'))
'es_AR.UTF8'
 >>> sorted({1:"Baño",2:"Batata",3:"bolsa",4:"Bata"}.iteritems(), 
key=lambda i: locale.strxfrm(i[1]))
[(1, 'Ba\xc3\xb1o'), (4, 'Bata'), (2, 'Batata'), (3, 'bolsa')]

Peeeeero, si tu intención realmente es que las minúsculas vengan 
primero, realmente se complica con locale. Podés hacer algo así:

 >>> from unicodedata import normalize
 >>> sorted({1:u"Baño",2:u"Batata",3:u"bolsa",4:u"Bata"}.iteritems(), 
key=lambda i: normalize('NFKD', i[1]).swapcase())
[(3, u'bolsa'), (1, u'Ba\xf1o'), (4, u'Bata'), (2, u'Batata')]

Además de haber hecho trampa (los valores del diccionario son de tipo 
unicode para que no explote unicodedata.normalize) me estoy metiendo con 
algo en lo que toco de oído. Si vas por este lado, no va a estar de más 
que te hagas algunos tests. En su momento, esto que mandó John hace un 
tiempo a la lista me resultó particularmente interesante:

http://listas.python.org.ar/pipermail/pyar/2010-August/002310.html


Suerte,
Pablo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110413/3269c000/attachment.html>


More information about the pyar mailing list