[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