Bucle secuencial a través de un diccionario de Python dando problemas [duplicado]

Posible duplicado:
¿En qué orden Python muestra las claves del diccionario?

Hubo una pregunta de Python muy extraña que estaba tratando de responder (en SO pero parece que el autor la eliminó). Esto me ha vuelto loco y parece que no puedo explicarme de manera plausible cuál podría ser la causa detrás de este desconcertante fenómeno. Tengo un diccionario de Python (matriz asociativa) que inicializo como se muestra a continuación.

d = {"word1": 1, "word2": 2, "word3": 3}

Y recorrerlo usando una construcción for..in en la que imprimo las teclas de "d" separadas por un espacio. Rendimiento esperado: palabra1 palabra2 palabra3
Salida real: palabra1 palabra3 palabra2

Luego traté de imprimir "d" como

 imprimir d 

Salida

{'palabra1': 1, 'palabra3': 3, 'palabra2': 2}

Estaba escaneando los documentos de Python en línea, el cuestionario existente en SO, blogs, pero no pude descubrir la causa. ¿Me estoy perdiendo de algo? Además, hay una amable solicitud para todos aquellos que votaron en contra de esta pregunta para que expliquen el motivo de la misma.

Salud. :-)

preguntado el 22 de mayo de 12 a las 16:05

-1. Elaboración: Bailas alrededor del tema, pero nunca dices qué es lo que está mal con el resultado esperado frente al resultado real. el problema esta en el solicite. Google o busque en stackoverflow "python", "order", "dictionary" y la respuesta se encuentra con bastante rapidez. -

@StevenRumbalski: Gracias. Soy un tonto del culo :( -

Voy a votar para cerrar esta pregunta como un duplicado exacto. Muchas gracias a todos los que se preocuparon por publicar / comentar aquí. :) -

3 Respuestas

Python dict no garantiza ningún orden particular de sus llaves.

collections.OrderedDict conserva el orden de inserción de sus claves.

contestado el 22 de mayo de 12 a las 16:05

De la documentación:

Es mejor pensar en un diccionario como un conjunto desordenado de claves: pares de valores, con el requisito de que las claves sean únicas (dentro de un diccionario). Un par de llaves crea un diccionario vacío: {}. Colocar una lista separada por comas de pares clave:valor entre llaves agrega pares iniciales clave:valor al diccionario; esta es también la forma en que se escriben los diccionarios en la salida.

Las operaciones principales en un diccionario son almacenar un valor con alguna clave y extraer el valor dado a la clave. También es posible eliminar un par clave:valor con del. Si almacena usando una clave que ya está en uso, el valor anterior asociado con esa clave se olvida. Es un error extraer un valor utilizando una clave inexistente.

El método keys() de un objeto de diccionario devuelve una lista de todas las claves utilizadas en el diccionario, en orden arbitrario (si desea ordenarlas, simplemente aplíquele la función sorted()). Para verificar si una sola clave está en el diccionario, use la palabra clave in.

http://docs.python.org/tutorial/datastructures.html

El último párrafo lo dice todo.

Respondido el 20 de junio de 20 a las 10:06

Las claves en un diccionario de Python no están ordenadas.

for key in sorted(d):
    print key,

huellas dactilares word1 word2 word3 como se esperaba.

contestado el 22 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.