如何在Orthon3中将OrderedDict转换为常规字典

Ben*_* A. 86 python ordereddictionary type-conversion

我正在努力解决以下问题:我想转换OrderedDict如下:

OrderedDict([('method', 'constant'), ('data', '1.225')])
Run Code Online (Sandbox Code Playgroud)

成为这样的常规字典:

{'method': 'constant', 'data':1.225}
Run Code Online (Sandbox Code Playgroud)

因为我必须将它作为字符串存储在数据库中.转换后,订单不再重要,所以无论如何我都可以省去订购的功能.

感谢任何提示或解决方案,

Thi*_*ter 75

>>> 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'}
>>>
Run Code Online (Sandbox Code Playgroud)

但是,要将其存储在数据库中,最好将其转换为JSON或Pickle等格式.有了Pickle你甚至可以保留订单!

  • 你可以[用`json`保存订单](http://stackoverflow.com/q/6921699/4279). (6认同)
  • 请注意,这不适用于嵌套的 OrderedDictionary 数据,@thiruvenkadam 应该是可接受的答案。 (3认同)
  • 是的确失去了秩序. (2认同)

thi*_*dam 57

尽管这是一个有问题的问题,但我想说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
Run Code Online (Sandbox Code Playgroud)

  • 很好的脚本等等,即_I不关心这个一次性任务的性能,只是gimme dicts所以我可以打印它们_ (5认同)

小智 7

很容易将您转换OrderedDict为常规,Dict如下所示:

dict(OrderedDict([('method', 'constant'), ('data', '1.225')]))
Run Code Online (Sandbox Code Playgroud)

如果必须将其作为字符串存储在数据库中,则可以使用JSON.这也很简单,你甚至不必担心转换为常规dict:

import json
d = OrderedDict([('method', 'constant'), ('data', '1.225')])
dString = json.dumps(d)
Run Code Online (Sandbox Code Playgroud)

或者将数据直接转储到文件中:

with open('outFile.txt','w') as o:
    json.dump(d, o)
Run Code Online (Sandbox Code Playgroud)


spg*_*spg 5

如果要查找不使用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)
Run Code Online (Sandbox Code Playgroud)


rad*_*tek 5

这是看起来最简单并且适用于 python 3.7 的内容

from collections import OrderedDict

d = OrderedDict([('method', 'constant'), ('data', '1.225')])
d2 = dict(d)  # Now a normal dict
Run Code Online (Sandbox Code Playgroud)

现在检查一下:

>>> type(d2)
<class 'dict'>
>>> isinstance(d2, OrderedDict)
False
>>> isinstance(d2, dict)
True
Run Code Online (Sandbox Code Playgroud)

注意:这也有效,并给出相同的结果 -

>>> {**d}
{'method': 'constant', 'data': '1.225'}
>>> {**d} == d2
True
Run Code Online (Sandbox Code Playgroud)

还有这个——

>>> dict(d)
{'method': 'constant', 'data': '1.225'}
>>> dict(d) == {**d}
True
Run Code Online (Sandbox Code Playgroud)

干杯