我正在努力解决以下问题:
我想像这样转换OrderedDict
:
OrderedDict([('method', 'constant'), ('data', '1.225')])
这样的常规字典:
{'method': 'constant', 'data':1.225}
因为我必须将它作为字符串存储在数据库中。转换后,订单不再重要,所以无论如何我都可以省去订购的功能。
感谢任何提示或解决方案,
本
答案 0 :(得分:64)
>>> 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你甚至可以保留订单!
答案 1 :(得分:49)
尽管这是一个有问题的问题,但我想说如果你在有序词典中有一个有序的词典,使用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
答案 2 :(得分: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)
答案 3 :(得分:1)
如果您在不使用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)
答案 4 :(得分:1)
这是最简单的方法,可在python 3.7中使用
d = OrderedDict([('method', 'constant'), ('data', '1.225')])
d2 = dict(d) # Now a normal dict
答案 5 :(得分:0)
它的简单方法
>>import json
>>from collection import OrderedDict
>>json.dumps(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))
答案 6 :(得分:0)
如果您希望以某种简单但又不同的解决方案,则可以使用{**dict}
语法:
from collections import OrderedDict
ordered = OrderedDict([('method', 'constant'), ('data', '1.225')])
regular = {**ordered}
答案 7 :(得分:0)
处理嵌套字典和可迭代对象但不使用json
模块的版本。嵌套字典变为dict
,嵌套可迭代变量变为list
,其他所有内容均不变(包括字典键和字符串/字节/字节数组)。
def recursive_to_dict(obj):
try:
if hasattr(obj, "split"): # is string-like
return obj
elif hasattr(obj, "items"): # is dict-like
return {k: recursive_to_dict(v) for k, v in obj.items()}
else: # is iterable
return [recursive_to_dict(e) for e in obj]
except TypeError: # return everything else
return obj
答案 8 :(得分:0)
您可以使用“dict_constructor”参数。
xmltodict.parse(text, attr_prefix='',
dict_constructor=dict
)