gpt4 book ai didi

python - Python 中的自定义 JSON sort_keys 顺序

转载 作者:太空狗 更新时间:2023-10-29 16:56:41 25 4
gpt4 key购买 nike

Python 2.6 中是否有任何方法可以为 JSON 的 sort_keys 提供自定义键或 cmp 函数?

我有一个来自 JSON 的字典列表:

[
{
"key": "numberpuzzles1",
"url": "number-puzzle-i.html",
"title": "Number Puzzle I",
"category": "nestedloops",
"points": "60",
"n": "087"
},
{
"key": "gettingindividualdigits",
"url": "getting-individual-digits.html",
"title": "Getting Individual Digits",
"category": "nestedloops",
"points": "80",
"n": "088"
}
]

...我已将其存储到列表变量 assigndb 中。我希望能够加载 JSON,修改它,然后使用 dumps(或其他)将其序列化,同时保持键的顺序不变

到目前为止,我已经尝试过这样的事情:

ordering = {'key': 0, 'url': 1, 'title': 2, 'category': 3,
'flags': 4, 'points': 5, 'n': 6}

def key_func(k):
return ordering[k]

# renumber assignments sequentially
for (i, a) in enumerate(assigndb):
a["n"] = "%03d" % (i+1)

s = json.dumps(assigndb, indent=2, sort_keys=True, key=key_func)

...但是 dumps 当然不支持像 list.sort() 那样的自定义键。也许有自定义 JSONEncoder 的东西?我似乎无法让它继续下去。

最佳答案

一个想法(用2.7测试):

import json
import collections
json.encoder.c_make_encoder = None
d = collections.OrderedDict([("b", 2), ("a", 1)])
json.dumps(d)
# '{"b": 2, "a": 1}'

参见:OrderedDict + issue6105 . c_make_encoder hack 似乎只有 Python 2.x 才需要。不是直接的解决方案,因为您必须为 OrderedDict 更改 dict,但它可能仍然可用。我检查了 json 库 ( encode.py ) 并且命令是硬编码的:

if _sort_keys:
items = sorted(dct.items(), key=lambda kv: kv[0])

关于python - Python 中的自定义 JSON sort_keys 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4402491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com