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

时间:2013-11-23 19:21:05

标签: python type-conversion ordereddictionary

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

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

这样的常规字典:

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

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

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

9 个答案:

答案 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)