2012-02-27 9 views

Respuesta

1

Esto no es posible. Solo puedes obtener una representación ordenada de un dict como el que estás obteniendo.


Editar

acaba de hacer algunas investigaciones. Parece que Python 2.7 tiene algo llamado OrderedDict, que te permitiría hacer esto. Aquí hay más información al respecto: http://docs.python.org/library/collections.html?highlight=ordereddict#ordereddict-examples-and-recipes

+0

Ah, ya veo, me adelanto a los tiempos: D: Qué mal uso el 2.5 por razones de hosting. Voy a cambiar mi código para aceptar la lista. – ofko

8

Los objetos estándar dict no están ordenados, por lo que no garantizan ni conservan ningún pedido. Esto se debe a que, dado que usualmente usas un dict para obtener un valor para un orden de clave, no es importante.

Si desea conservar el orden, puede usar an OrderedDict. Esto no está ordenado, pero sí recuerda el orden en que se le agregaron los elementos. Así que usted puede crear uno con sus pares de valores clave en orden clasificado:

>>> d = {"a":4, "b":12, "c":2} 
>>> from collections import OrderedDict 
>>> od = OrderedDict(sorted(d.items(), key=lambda(k,v):(v,k))) 
>>> od 
OrderedDict([('c', 2), ('a', 4), ('b', 12)]) 
1

Como muchos otros señalaron que puede no como Python no permitirá que lo haga (excepto con predice ordenados). Lo que podría poner en práctica todos modos es algo por el estilo (pitón < 2,7)

>>> d = {"a":4, "b":12, "c":2} 
>>> z = [(i,d[i]) for i in d] 
>>> z.sort(key=lambda x: x[1]) 
>>> z 
[('c', 2), ('a', 4), ('b', 12)] 

Y como ahora d está ordenada puede realizar una búsqueda binaria sobre ella para conseguir lo que quiere (o una iteración normal si usted no' demasiado cuidado con la velocidad).

Cuestiones relacionadas