繁体   English   中英

在Python中具有特定顺序的OrderedDict

[英]OrderedDict with specific order in Python

我有一个字典,我发送到API,不幸的是,API要求字典是一个非常具体的顺序。 我正在从一个文件加载字典。

现在json.load(fh, object_pairs_hook=OrderedDict)完全按照预期的方式执行,并按字母顺序排序顶级键,但我需要以不同方式排序字典。

具体订单:

{
  "kind": "string",
  "apiVersion": "string",
  "metadata": {...},
  "spec": {
    "subKey": "string"
  }
}

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

在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

在这种情况下你不需要objects_pairs_hook ,只需加载json文件并使用自定义排序从中创建OrderedDict

SORT_ORDER = {
    "kind": 0,
    "apiVersion": 1,
    "metadata": 2,
    "spec": 3
}

d = json.load(fh)
d = OrderedDict(sorted(d.items(), key=lambda x: SORT_ORDER.get(x[0])))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM