web-dev-qa-db-fra.com

Comment convertir un OrderedDict en un dict normal en python3

Je suis aux prises avec le problème suivant: Je veux convertir une OrderedDict comme ceci:

OrderedDict([('method', 'constant'), ('data', '1.225')])

dans un dict régulier comme ceci:

{'method': 'constant', 'data':1.225}

parce que je dois le stocker en tant que chaîne dans une base de données. Après la conversion, la commande n'est plus importante, je peux donc quand même épargner la fonctionnalité commandée.

Merci pour tout conseil ou solution,

Ben

68
Ben A.
>>> 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'}
>>>

Cependant, pour le stocker dans une base de données, il serait préférable de le convertir dans un format tel que JSON ou Pickle. Avec Pickle, vous préservez même la commande!

56
ThiefMaster

Même si cette question remonte à un an, j'aimerais dire que l'utilisation de dict ne vous aidera pas si vous avez un dict ordonné dans le dict ordonné. Le moyen le plus simple de convertir ces dict ordonnés récursifs sera

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
45
thiruvenkadam

Il est facile de convertir votre OrderedDict en un Dict régulier comme ceci:

dict(OrderedDict([('method', 'constant'), ('data', '1.225')]))

Si vous devez le stocker sous forme de chaîne dans votre base de données, utilisez JSON. C’est aussi très simple, et vous n’aurez même pas à vous soucier de la conversion en une variable dict:

import json
d = OrderedDict([('method', 'constant'), ('data', '1.225')])
dString = json.dumps(d)

Ou videz les données directement dans un fichier:

with open('outFile.txt','w') as o:
    json.dump(d, o)
7
Kyle Neary

Voici ce qui semble le plus simple et fonctionne en python 3.7

d = OrderedDict([('method', 'constant'), ('data', '1.225')])
d2 = dict(d)  # Now a normal dict
1
radtek

C'est simple 

>>import json 
>>from collection import OrderedDict

>>json.dumps(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))
0
Ramesh K

Si vous recherchez une version récursive sans utiliser le module 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)
0
spg