¿Por qué los valores del diccionario no están en el orden insertado?

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:

    • Python 2.7, está integrado en el módulo de colecciones.
    • Django tiene un SortedDict enviado con él
    • 2.4-2.7 puede usar el módulo ordenado, puede instalarlo o instalarlo fácilmente

    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)