2010-12-16 19 views

Respuesta

17

El orden tiene que ver con cómo funcionan internamente y qué orden terminan en la tabla hash. Eso, a su vez, depende del valor hash de las claves, el orden en que fueron insertadas y la implementación de Python que está utilizando.

El orden es arbitrario (pero no al azar) y nunca será útil saber qué orden será.

Para obtener una lista ordenada de llaves, simplemente use sorted(D), que en su caso devolverá ['a', 'b', 'c'].

+1

reloj esta opción si desea saber cómo funcionan los diccionarios: http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie

+0

no soy capaz de acceder al enlace anterior – SKT

+0

Creo que es probable que esta charla: https://www.youtube.com/watch?v=C4Kc8xzcA68 –

5

De the documentation:

Lo mejor es pensar en un diccionario como un conjunto desordenado de la clave es: pares de valores, con el requisito de que las claves son únicas (dentro de un diccionario).

+0

Gracias y sabía que el diccionario no está ordenado. Entonces, las cosas que Python me confundió porque cambiaron el orden de visualización. – QQending

+2

Se explicita que la orden puede cambiar en cualquier momento. Eso es para que la implementación pueda ser más rápida. Si necesita las claves en un orden en particular, puede ordenarlas. –

+2

QQending: desordenado significa (entre otras cosas) que el orden que sale puede no ser el orden que ingresa, entonces, ¿por qué el comportamiento de pitones es confuso? Si se pregunta por qué hizo algo diferente al orden "ordenado", los dicts usan tablas hash, no árboles de búsqueda. El orden probablemente se base en el hash de la clave mod, el tamaño actual de la tabla o algo igualmente impredecible. –

2

En cualquier orden que desee. Tal es la naturaleza de un diccionario. Si desea en un orden específico, usted tiene que hacerlo usted mismo:

>>> d = {'pax': 1, 'george': 2, 'guido' : 3} 

>>> d 
{'pax': 1, 'george': 2, 'guido': 3} 

>>> [(key,d[key]) for key in sorted(d)] 
[('george', 2), ('guido', 3), ('pax', 1)] 
+0

No es estrictamente cierto: la respuesta de Lennart es técnicamente más correcta "El orden es arbitrario (pero no aleatorio)". –

+1

En ninguna parte mencioné "al azar", solo que el diccionario no especifica el orden. Puede devolverlos en el orden que estime conveniente. El hecho de que pueda regresar en un orden determinista basado en el contenido y el historial de operaciones no lo resuelve de la responsabilidad de ordenarlo usted mismo si eso es lo que quiere: "El método keys() de un objeto de diccionario devuelve una lista de todos las claves utilizadas en el diccionario, en orden arbitrario (si lo quiere ordenado, simplemente aplique la función sorted()) ". – paxdiablo

Cuestiones relacionadas