2011-03-28 15 views
16

Este es mi código:¿Cómo revertir el orden de las claves en python dict?

a = {0:'000000',1:'11111',3:'333333',4:'444444'} 

for i in a: 
    print i 

muestra:

0 
1 
3 
4 

pero quiero que se muestre:

4 
3 
1 
0 

es así, ¿qué puedo hacer?

+5

Los diccionarios no tienen un pedido. Las claves salen en lo que parece ordenarse solo por suerte (y un matiz de implementación en el que no puede confiar). No hay un orden inherente. –

Respuesta

26

El orden teclas son iterados en es arbitraria. Fue solo una coincidencia que estaban en orden ordenado.

>>> a = {0:'000000',1:'11111',3:'333333',4:'444444'} 
>>> a.keys() 
[0, 1, 3, 4] 
>>> sorted(a.keys()) 
[0, 1, 3, 4] 
>>> reversed(sorted(a.keys())) 
<listreverseiterator object at 0x02B0DB70> 
>>> list(reversed(sorted(a.keys()))) 
[4, 3, 1, 0] 
+13

Puedes acelerar un poco la caja invertida haciendo 'sorted (a.keys(), reverse = True)' en lugar de usar 'built-in()'. – ncoghlan

8

Probar:

for i in sorted(a.keys(), reverse=True): 
    print i 
12

Diccionarios no están ordenados para que no se les puede revertir. El orden de la salida actual es arbitrario.

Dicho esto, se puede pedir las llaves del curso:

for i in sorted(a.keys(), reverse=True): 
    print a[i]; 

pero esto le da el orden inverso de la ordenados llaves, no necesariamente el orden inverso de las claves de cómo han sido añadidas. Es decir. que no le dará 1 0 3 si su diccionario fue:

a = {3:'3', 0:'0', 1:'1'} 
1
for i in reversed(sorted(a.keys())): 
    print i 
+1

Creo que esta es una respuesta "mala" porque el asker claramente tiene un concepto erróneo acerca de cómo debe funcionar la función 'dict' de python y ese concepto erróneo en lugar de darle algo que 'parece' lo que quiere. –

+0

Tienes razón, debería haber leído la pregunta con más cuidado. – Simon

+0

Votación positiva: StackExchange no es una institución correccional. ifLoop muestra cómo ser útil en lugar de simplemente corregir. –

4

Los diccionarios de Python no tienen ninguna 'orden' asociada a ellos. Es simplemente una "coincidencia" que el dict imprima el mismo orden. No hay garantías de que los elementos en un diccionario salgan en cualquier orden.

Si desea hacer frente a los pedidos, tendrá que convertir el diccionario a una lista.

a = list(a) # keys in list 
a = a.keys() # keys in list 
a = a.values() # values in list 
a = a.items() # tuples of (key,value) in list 

Ahora se puede ordenar la lista de forma normal, por ejemplo, a.sort() y revertirla, así, por ejemplo, a.reverse()

+0

Esto solo colocará las claves en una lista. Perderás los valores. –

+0

+1 para explicar que todas las otras respuestas se están convirtiendo a la lista. – Boz

4

Python dict no se ordena en 2.x. Pero hay una implementación de dict ordenada en 3.1.

+1

+1 para OrderedDict. De hecho, también está disponible en Python 2.7: http://docs.python.org/library/collections.html#collections.OrderedDict –

Cuestiones relacionadas