在 Python 中具有特定顺序的 OrderedDict

mxp*_*usb 5 python json dictionary

我有一本要发送到 API 的字典,不幸的是,该 API 要求字典按非常特定的顺序排列。我正在从文件加载字典。

现在json.load(fh, object_pairs_hook=OrderedDict)完全按照它应该做的,并按字母顺序排列顶级键,但我需要以不同的方式对字典进行排序。

具体顺序:

{
  "kind": "string",
  "apiVersion": "string",
  "metadata": {...},
  "spec": {
    "subKey": "string"
  }
}
Run Code Online (Sandbox Code Playgroud)

如何使用从文件加载的字典指定顶级和子级键的字典顺序?

sta*_*yli 4

在 Python 中,项目的顺序OrderedDict遵循它们写入其中的顺序。

因此,如果您想在创建时控制项目的顺序OrderedDict,您可以按照您想要的顺序编写它们。对于现有的OrderedDict,您可以按顺序读出、删除和写回每一项。

在您的示例中,如果您需要调整项目的顺序,您可以这样做:

orders = ("kind", "apiVersion", "metadata", "spec")
for key in orders:
    v = object_pairs_hook[key]
    del object_pairs_hook[key]
    object_pairs_hook[key] = v
Run Code Online (Sandbox Code Playgroud)