tuple example python type-conversion ordereddictionary

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