如何在python中维护嵌套字典的顺序(不是普通的,而是嵌套的)?

时间:2018-10-27 18:31:18

标签: python dictionary nested python-2.x ordereddictionary

我只是将另一个程序生成的字典复制到python程序(以python代码硬编码)。

a = {'b':{'d':3, 'c':4}, 'a':2}

但是在阅读字典时,顺序正在改变,这带来了问题。

如果我也使用OrderedDict,则仅保存顶层订单,而不保存内部字典。

我需要顺序,因为我要根据字典数据生成一棵树,所以当我从那棵树读回时,我将得到相同的顺序。我正在使用python 2版本。

谢谢。这是python的缺点吗?

编辑:我正在使用以下单行语句:

a = OrderedDict({'b':{'d':3, 'c':4}, 'a':2})

我只是以简单的字典为例,但是我的实际字典很大,因此我无法手动将OrderedDict添加到所有内部字典中以使其有序。在python 2中寻找解决方案,如果不能的话,请在python 3中提供

2 个答案:

答案 0 :(得分:1)

您的内部字典也应该是OrderedDict。

您也可以使用关联列表(键值对列表)。 我认为这更接近您想要做的事情:尊重确切的顺序或阅读的内容。

另一种替代方法是维护列表(用于订单)和命令来访问元素。这必须在每个级别上完成。

答案 1 :(得分:0)

字典在Python 2.x中未排序

因此,任何解决方案将您的数据作为常规字典读取,对您来说将毫无用处。您需要首先关注工作流的这一方面,而您尚未提供任何信息或代码。

使用带有OrderedDict的元组列表

这是初始化OrderedDict错误方法:

a = OrderedDict({'b': {'d':3, 'c':4}, 'a':2})

这特别失败,因为您提供的字典在Python 2.x中是无序的。另外,您还没有尝试将 inner 词典设为OrderedDict

相反,您需要将有序的元组列表馈送到外部OrderedDict 内部OrderedDict:< / p>

from collections import OrderedDict

a = OrderedDict([('b', OrderedDict([('b', 3), ('c', 4)])), ('a', 2)])