【问题标题】:OrderedDict move_to_end alternative for Python 3.5+Python 3.5+ 的 OrderedDict move_to_end 替代方案
【发布时间】:2021-05-05 15:46:05
【问题描述】:

我有一个带有 n 个参数的字典:

print(table)
{
    "Parameters":{
        "erVersion":"1.0",
        "A":"a",
        "rVersion":"1.0",
        "B":"b",
        "C":"c",
        "Ur":"legislator",
        "RecordSize":"13",
        "classification":"json",
        "compressionType":"none"
    }
}

我想将参数 A、B 和 C 放在参数的顶部。我尝试使用以下代码执行此操作:

table['Parameters'].move_to_end("C", last=False)
table['Parameters'].move_to_end("B", last=False)
table['Parameters'].move_to_end("A", last=False)

但是,这在 Python 3.5+ 中不起作用(参考:https://stackoverflow.com/a/16664932/7615751

在较新版本的 Python 中是否有替代方案?如果另一种方法更好,我也很感激使用它的建议。

我不想通过定义一个固定的参数顺序来解决这个问题,因为我有很多这样的表,它们的参数数量不同(尽管它们总是有 A、B、C 参数)。

【问题讨论】:

  • 它在 3.8 上适用于我。你可能会得到“AttributeError: 'dict' object has no attribute 'move_to_end'”吗?
  • 在您的示例中,参数似乎不是有序字典
  • @Reti43 是的。我可以解决这个问题吗?
  • 您需要使用OrderedDict,而不是常规的dict。您自己链接的问题解决了您的问题...

标签: python


【解决方案1】:

假设

data = {
    "Parameters":{
        "erVersion":"1.0",
        "A":"a",
        "rVersion":"1.0",
        "B":"b",
        "C":"c",
        "Ur":"legislator",
        "RecordSize":"13",
        "classification":"json",
        "compressionType":"none"
    }
}

您似乎在做table = OrderedDict(data),它将仅为键“参数”创建所述对象。它的值,即内部字典,将保持正常的dict,不支持move_to_end()。你可以解决这个问题

table['Parameters'] = OrderedDict(table['Parameters'])

【讨论】:

  • 是的,这就是问题所在。谢谢你的解释。
猜你喜欢
  • 2016-11-16
  • 2020-05-24
  • 1970-01-01
  • 2021-04-19
  • 2019-07-15
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多