>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
que acabo de hacer esto en el terminal de Python y Me pregunto por qué la tecla 'c' sería después de la tecla 'b' ???¿En qué orden muestra Python las claves del diccionario?
>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
que acabo de hacer esto en el terminal de Python y Me pregunto por qué la tecla 'c' sería después de la tecla 'b' ???¿En qué orden muestra Python las claves del diccionario?
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']
.
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).
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
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. –
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. –
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)]
No es estrictamente cierto: la respuesta de Lennart es técnicamente más correcta "El orden es arbitrario (pero no aleatorio)". –
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
En Python 2.7 se puede utilizar Ordered Dict.
reloj esta opción si desea saber cómo funcionan los diccionarios: http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie
no soy capaz de acceder al enlace anterior – SKT
Creo que es probable que esta charla: https://www.youtube.com/watch?v=C4Kc8xzcA68 –