[pyar] Ordenamiento diccionarios

Natalia Gutierrez ngutierrez en icop.com.ar
Jue Abr 14 08:40:12 ART 2011


Gracias Pablo Ziliani! Justamente viene por ahi el tema.... quiza en el ejemplo estuvo de mas el elemento "bolsa"..... en realidad mi consulta apuntaba a porque "Baño" era colocado detras de "Bata" (obviamente que es por el caracter "ñ"). El tema es que la rutina que deseo modificar se encuentra dentro de un sistema, al cual no me gustaria modificarle los "locale" y todo eso.... Como veras soy novata en python, y quiza por eso me cuesta interpretar las respuestas. Podria llegar a hacer el setlocale, correr la rutina de ordenamiento, y luego volverlo a su estado original????



Natalia Gutiérrez
Ingeniería y Desarrollo
ICOP Santa Fe S.R.L.
Primera Junta 3057
S3000CDM - Santa Fe 
(0342) 4526057 int. 140
ngutierrez en icop.com.ar 

  ----- Original Message ----- 
  From: Pablo Ziliani 
  To: Python Argentina 
  Sent: Wednesday, April 13, 2011 9:58 PM
  Subject: Re: [pyar] Ordenamiento diccionarios


  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



------------------------------------------------------------------------------


  _______________________________________________
  pyar mailing list pyar en python.org.ar
  http://listas.python.org.ar/listinfo/pyar

  PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110414/87932f20/attachment.html>


More information about the pyar mailing list