Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将OrderedDict转换为Dict_Python_Python 3.x_Dictionary_Ordereddictionary_Ordereddict - Fatal编程技术网

Python 如何将OrderedDict转换为Dict

Python 如何将OrderedDict转换为Dict,python,python-3.x,dictionary,ordereddictionary,ordereddict,Python,Python 3.x,Dictionary,Ordereddictionary,Ordereddict,我有一份清单 a = [OrderedDict([('a','b'), ('c','d'), ('e', OrderedDict([('a','b'), ('c','d') ]))])] 我想转换字典中的顺序信息 你知道我该怎么做吗 谢谢大家! 要转换嵌套的orderedict,可以使用包json >>> import json >>> json.loads(json.dumps(a)) [{'a': 'b', 'c': 'd', 'e': {'a': '

我有一份清单

a = [OrderedDict([('a','b'), ('c','d'), ('e', OrderedDict([('a','b'), ('c','d') ]))])]
我想转换字典中的顺序信息

你知道我该怎么做吗


谢谢大家!

要转换嵌套的
orderedict
,可以使用包
json

>>> import json
>>> json.loads(json.dumps(a))

[{'a': 'b', 'c': 'd', 'e': {'a': 'b', 'c': 'd'}}]

您可以构建一个递归函数来完成从OrderedDict到dict的转换,同时使用isinstance调用检查数据类型

from collections import OrderedDict

def OrderedDict_to_dict(arg):
    if isinstance(arg, (tuple, list)): #for some iterables. might need modifications/additions?
        return [OrderedDict_to_dict(item) for item in arg]

    if isinstance(arg, OrderedDict): #what we are interested in
        arg = dict(arg)

    if isinstance(arg, dict): #next up, iterate through the dictionary for nested conversion
        for key, value in arg.items():
            arg[key] = OrderedDict_to_dict(value)

    return arg

a = [OrderedDict([('a','b'), ('c','d'), ('e', OrderedDict([('a','b'), ('c','d') ]))])]


result = OrderedDict_to_dict(a)
print(result)
#Output:
[{'a': 'b', 'c': 'd', 'e': {'a': 'b', 'c': 'd'}}]
但是,请注意OrderedDicts也是字典,并且支持键查找

print(a[0]['e'])
#Output:
OrderedDict([('a', 'b'), ('c', 'd')])

a[0]['e']['c']
#Output:
'd'

因此,如果只需要访问字典允许的值,则不需要将OrderedDict转换为Dict,因为OrderedDict支持相同的操作。

要转换嵌套的OrderedDict,可以使用:

from collections import OrderedDict
a = [OrderedDict([('id', 8)]), OrderedDict([('id', 9)])]
data_list = []
for i in a:
    data_list.append(dict(i))
print(data_list)
#Output:[{'id': 8}, {'id': 9}]

这不是一个orderddict,而是一个元组列表,你也可以做
dict(a)
你自己尝试过吗?也许是打电话给dict构造函数?你在这里写了一个列表,然后问到如何在字典中转换一个有序的dict?你能澄清一下你需要什么吗?此外,OrderedDict可以像一本没有问题的字典一样工作,您希望转换OrderedDict有什么特别的原因吗?这里的预期输出是什么?一个
OrderedDict
是一个
dict
;在什么意义上您需要“转换”它?我尝试了您的解决方案,但我有如下内容:
{ValueError}字典更新序列元素#0的长度为x;y是必需的