example - Cómo convertir un OrderedDict en un dict regular en python3
named tuple example (5)
Estoy luchando con el siguiente problema: quiero convertir un OrderedDict
como este:
OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')])
en un dict regular como este:
{''method'': ''constant'', ''data'':1.225}
porque tengo que almacenarlo como una cadena en una base de datos. Después de la conversión, el pedido ya no es importante, así que puedo ahorrar la característica ordenada de todos modos.
Gracias por cualquier pista o solución,
Ben
Es fácil convertir su OrderedDict
a un Dict
regular como este:
dict(OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')]))
Si tiene que almacenarlo como una cadena en su base de datos, usar JSON es el camino a seguir. Eso también es bastante simple, y ni siquiera tiene que preocuparse de convertir a un dict
regular:
import json
d = OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')])
dString = json.dumps(d)
O volcar los datos directamente a un archivo:
with open(''outFile.txt'',''w'') as o:
json.dump(d, o)
>>> from collections import OrderedDict
>>> OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')])
OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')])
>>> dict(OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')]))
{''data'': ''1.225'', ''method'': ''constant''}
>>>
Sin embargo, para almacenarlo en una base de datos sería mucho mejor convertirlo a un formato como JSON o Pickle. ¡Con Pickle incluso guardas el orden!
Si está buscando una versión recursiva sin usar el módulo json
:
def ordereddict_to_dict(value):
for k, v in value.items():
if isinstance(v, dict):
value[k] = ordereddict_to_dict(v)
return dict(value)
Su forma simple
>>import json
>>from collection import OrderedDict
>>json.dumps(dict(OrderedDict([(''method'', ''constant''), (''data'', ''1.225'')])))
Aunque esta es una pregunta de hace un año, me gustaría decir que usar dict
no ayudará si tienes un dict ordenado dentro del dict ordenado. La forma más sencilla que podría convertir esas dict recursivas ordenadas será
import json
from collections import OrderedDict
input_dict = OrderedDict([(''method'', ''constant''), (''recursive'', OrderedDict([(''m'', ''c'')]))])
output_dict = json.loads(json.dumps(input_dict))
print output_dict