Подтвердить что ты не робот

Как преобразовать OrderedDict в обычный dict в python3

Я борюсь со следующей проблемой: Я хочу преобразовать OrderedDict следующим образом:

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

в регулярный dict, например:

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

потому что я должен хранить его как строку в базе данных. После преобразования заказ больше не важен, поэтому я все равно могу починить заказанную функцию.

Спасибо за любые подсказки или решения,

Бен

4b9b3361

Ответ 1

>>> 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'}
>>>

Однако, чтобы сохранить его в базе данных, было бы гораздо лучше преобразовать его в формат, такой как JSON или Pickle. С Pickle вы даже сохраняете заказ!

Ответ 2

Несмотря на то, что это вопрос на год, я хотел бы сказать, что использование dict не поможет, если у вас есть упорядоченный dict в пределах заказанного dict. Самый простой способ, который мог бы преобразовать рекурсивный упорядоченный dict, будет

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

Ответ 3

Легко преобразовать ваш OrderedDict в обычный Dict следующим образом:

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

Если вам нужно сохранить его в виде строки в вашей базе данных, использование JSON - путь. Это также довольно просто, и вам даже не нужно беспокоиться о преобразовании в обычный Dict:

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

Или выгрузите данные непосредственно в файл:

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

Ответ 4

Если вы ищете рекурсивную версию без использования модуля 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)

Ответ 5

Его простой способ

>>import json 
>>from collection import OrderedDict

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