我只是将另一个程序生成的字典复制到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中提供
答案 0 :(得分:1)
您的内部字典也应该是OrderedDict。
您也可以使用关联列表(键值对列表)。 我认为这更接近您想要做的事情:尊重确切的顺序或阅读的内容。
另一种替代方法是维护列表(用于订单)和命令来访问元素。这必须在每个级别上完成。
答案 1 :(得分:0)
因此,任何解决方案将您的数据作为常规字典读取,对您来说将毫无用处。您需要首先关注工作流的这一方面,而您尚未提供任何信息或代码。
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)])