【问题标题】:How to maintain the order of a nested dictionary in python (not plain, but nested)?如何在python中维护嵌套字典的顺序(不是普通的,而是嵌套的)?
【发布时间】:2019-04-01 04:18:05
【问题描述】:

我刚刚将另一个程序生成的字典复制到 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中提供

【问题讨论】:

  • 发布您用于 OrderedDict 的代码,您可能只是忘记将嵌套的 dict 也设为 OrderedDict。
  • 我正在使用这个单行语句:a = OrderedDict({'b':{'d':3, 'c':4}, 'a':2})

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


【解决方案1】:

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

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

另一种选择是维护一个列表(用于订单)和一个访问元素的字典。这必须在每个级别上完成。

【讨论】:

  • 如何让内页有序,阅读本身就是问题
  • 你是怎么读的?用你的代码解析?如果可能,您应该使用 OrderedDict 或 List。
【解决方案2】:

字典在 Python 2.x 中没有排序

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

使用带有OrderedDict 的元组列表

这是初始化OrderedDict不正确方式:

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

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

相反,您需要将有序的元组列表提供给外部OrderedDict内部OrderedDict

from collections import OrderedDict

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

【讨论】:

  • 谢谢。但是从另一个java文件复制的字典(树节点结构)太大了,我无法手动更改所有子字典。您能否让我知道这在 python 3 中是否直接可行(如果不是 2),以便我可以将 python 3 用于我的独立脚本。
  • @KalyanKumar,对不起,我不明白你的问题。如前所述,您的问题是理解为什么OrderedDict({'b':{'d':3, 'c':4}, 'a':2}) 没有按您的预期保留排序。如果您需要其他内容,请edit your question 使其更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2021-12-29
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
相关资源
最近更新 更多