Cuando declaro una lista 1,2,3,4 y hago algo con ella, incluso solo imprimo recupero la misma secuencia 1,2,3,4.
Pero cuando hago cualquier cosa con los diccionarios, siempre cambian la secuencia de números, como si estuviera ordenada de una manera retorcida que no puedo entender.
test1 = [4,1,2,3,6,5] print test1 test2 = {"c":3,"a":1,"b":2,"d":4} print test2 [4, 1, 2, 3, 6, 5] {'a': 1, 'c': 3, 'b': 2, 'd': 4}
Cómo en el mundo ‘a’ se convirtió en el primer elemento y ‘c’, incluso si ordenó alfabéticamente el diccionario, debería haber sido 1,2,3,4 o a, b, c, d no 1,3,2, 4. wT? F @! $! @ $ # @!
Entonces, ¿cómo imprimo, obtengo valores del diccionario sin cambiar las posiciones de los elementos?
Los diccionarios en Python están desordenados por definición . Use OrderedDict
si necesita el orden en que se insertaron los valores (está disponible en Python 2.7 y 3.x).
El orden del diccionario no está definido! No confíes en ello para nada. Busque un diccionario ordenado si realmente quiere un diccionario ordenado, pero por lo general no lo necesita.
Ejemplos:
Antes de que te enojes y te frustres, tal vez deberías leer sobre qué es realmente un diccionario y cómo funciona:
http://docs.python.org/library/stdtypes.html#mapping-types-dict
Los dicts de Python utilizan una tabla hash como mecanismo de almacenamiento subyacente. Eso significa que una clave hash se genera a partir de la clave que proporcionas. No hay garantías sobre el pedido con estas claves hash. Las entradas de un diccionario se obtienen en orden secuencial de su ubicación en la tabla hash subyacente cuando solicita valores (), claves () o elementos ().
La ventaja de usar una tabla hash es que es extremadamente rápido. A diferencia de la clase de mapa de c ++ que utiliza un mecanismo de almacenamiento de árbol rojo-negro (que está ordenado por las claves en bruto), una tabla hash no necesita ser reestructurada constantemente para mantenerla eficiente. Para más información sobre las tablas hash, ver:
http://en.wikipedia.org/wiki/Hash_table
Como han dicho otros carteles, busque OrderedDict si necesita tener un diccionario ordenado por clave.
¡Buena suerte!
Claramente usted sabe acerca de las listas. Puede solicitar el elemento en el índice i de una lista. Esto es porque las listas están ordenadas.
>>> [1,2,3,4] == [1,4,3,2] False
En este contexto, puede pensar en diccionarios, pero donde el índice es la clave. Por lo tanto, dos diccionarios son iguales si los valores correspondientes de todas las claves en ambos diccionarios son los mismos (si un diccionario tiene claves que el otro no, entonces los dos no son iguales). Así:
>>> {1:'a', 2:'b'} == {2:'b', 1:'a'} True
Más trivia
Un diccionario hace algo llamado hash en las claves del diccionario para que cuando solicite el valor en una clave en particular (índice), pueda recuperar este valor más rápido.
Espero que esto ayude
Los diccionarios son sin clasificar. Esto está bien documentado. No confíe en el orden de los diccionarios.
Si quieres ver las entradas en orden. algo como:
test2 = {"c":3,"a":1,"b":2,"d":4} ks = test2.keys() ks.sort() for key in ks: print key + ':' + str(test2[key])
(cortar, pegar, sazonar al gusto)