在Python中具有特定顺序的OrderedDict
我有一个字典,我正在发送给一个API,不幸的是,API要求字典的顺序非常具体。我正在从文件中加载词典 现在,在Python中具有特定顺序的OrderedDict,python,json,dictionary,Python,Json,Dictionary,我有一个字典,我正在发送给一个API,不幸的是,API要求字典的顺序非常具体。我正在从文件中加载词典 现在,json.load(fh,object\u pairs\u hook=OrderedDict)完全按照它应该做的做,并按字母顺序排列顶级键,但我需要对字典进行不同的排序 具体顺序: { "kind": "string", "apiVersion": "string", "metadata": {...}, "spec": { "subKey": "string"
json.load(fh,object\u pairs\u 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\u pairs\u hook
在这种情况下,只需加载json文件并使用自定义排序从中创建orderedict
:
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])))
说得好。你看完后知道如何按顺序写吗?你的问题有点让人困惑。尝试使用OrderedDict编写一些代码,如果遇到问题,可以用一个特定的问题发布。这非常糟糕,在本机Python中是O(N)。列表理解方法更好。JSON对象不应该被排序,因此您可能不应该使用
JSON
@chepner我没有选择,它必须被排序。