如何在python3中将OrderedDict转换为常规dict


109

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

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

变成这样的常规字典:

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

因为我必须将其作为字符串存储在数据库中。转换后,顺序不再重要,因此无论如何我都可以保留订购的功能。

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


1
repr(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))
iruvar13年

是的,这也可以。谢谢!
Ben A.

Answers:


95
>>> 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,您甚至可以保留订单!


6
jfs

谢谢,还有使用泡菜的建议。我会使用pickle,而实际上我在其他地方使用了pickle,但是有些约束要求使用dict转换为字符串。
Ben A.

可以将ordersdict转换为dict宽松订单吗?
RamPrasadBismil '16

2
是的,它确实会失去订单。
nael

python <3.0中的json.loads也不保留顺序。
nael

70

即使这是一个古老的问题,我想说的是,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

8
一个脚本尼斯的举动等,即我不关心性能这个一次性的任务,只要给类型的字典,所以我可以漂亮打印出来
driftcatcher

7

可以很容易地将您转换成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)

6

如果要查找不使用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)

不处理数据列表。
拉菲

1

这是看起来最简单的方法,可在python 3.7中使用

from collections import OrderedDict

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

现在检查一下:

>>> type(d2)
<class 'dict'>
>>> isinstance(d2, OrderedDict)
False
>>> isinstance(d2, dict)
True

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

>>> {**d}
{'method': 'constant', 'data': '1.225'}
>>> {**d} == d2
True

以及-

>>> dict(d)
{'method': 'constant', 'data': '1.225'}
>>> dict(d) == {**d}
True

干杯


0

如果您以某种方式想要一个简单而又不同的解决方案,则可以使用以下{**dict}语法:

from collections import OrderedDict

ordered = OrderedDict([('method', 'constant'), ('data', '1.225')])
regular = {**ordered}

-3

简单的方法

>>import json 
>>from collection import OrderedDict

>>json.dumps(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.