[英]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.