Как преобразовать OrderedDict в обычный dict в python3
Я борюсь со следующей проблемой:
Я хочу преобразовать OrderedDict
следующим образом:
OrderedDict([('method', 'constant'), ('data', '1.225')])
в регулярный dict, например:
{'method': 'constant', 'data':1.225}
потому что я должен хранить его как строку в базе данных. После преобразования заказ больше не важен, поэтому я все равно могу починить заказанную функцию.
Спасибо за любые подсказки или решения,
Бен
Ответы
Ответ 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')])))