python - example - ordereddict to json
Python OrderedDict no guarda el orden de elementos (1)
Esta pregunta ya tiene una respuesta aquí:
- Convirtiendo dict a OrderedDict 4 respuestas
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).