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



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



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


в обычный дикт такой:



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


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



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



Бен

662   6  

6 ответов:

>>> 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. С рассолом вы даже сохраняете порядок!

хотя это вопрос годичной давности, я хотел бы сказать, что с помощью 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

это легко конвертировать 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)

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

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

>>import json 
>>from collection import OrderedDict

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

вот что кажется самым простым и работает в python 3.7

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

Comments

    Ничего не найдено.