ordereddict example dict python python-2.7 ordereddictionary

python - example - ordereddict to json



Python OrderedDict no guarda el orden de elementos (1)

Esta pregunta ya tiene una respuesta aquí:

Intento crear un objeto OrderedDict pero tan pronto como lo creo, todos los elementos están mezclados.

Esto es lo que hago:

from collections import OrderedDict od = OrderedDict({(0,0):[2],(0,1):[1,9],(0,2):[1,5,9]})

Los elementos no permanecen en el orden que asigno

od OrderedDict([((0, 1), [1, 9]), ((0, 0), [2]), ((0, 2), [1, 5, 9])])

docs.python.org no tiene un ejemplo y no puedo entender por qué el orden se está complicando. Cualquier ayuda es muy apreciada.


Tu problema es que estás construyendo un dict para dar los datos iniciales al OrderedDict - este dict no almacena ningún orden, por lo que el orden se pierde antes de que llegue al OrderedDict .

La solución es construir a partir de un tipo de datos ordenados, la más fácil es una list de tuple :

>>> from collections import OrderedDict >>> od = OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])]) >>> od OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])

Vale la pena señalar que esta es la razón OrderedDict cual OrderedDict usa la sintaxis para su representación de cadenas: las representaciones de cadenas deben tratar de ser códigos Python válidos para reproducir el objeto donde sea posible, y es por eso que el resultado utiliza una lista de tuplas en lugar de dict.

Editar: a partir de Python 3.6, kwargs está ordenado , por lo que puede utilizar argumentos de palabras clave en su lugar, siempre que esté en una versión actualizada de Python.

A partir de 3.7 , esto también es cierto para dict s (fue para CPython en 3.6, pero la especificación del idioma no lo especificaba, por lo que el uso de OrderedDict todavía era necesario para la compatibilidad). Esto significa que si puede asumir un entorno 3.7+, a menudo puede eliminar OrderedDict completo, o construir uno a partir de un dict regular si necesita una característica específica (por ejemplo: orden de importancia para la igualdad).