作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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/
我正在尝试使用 ruamel.yaml 将 Python 字典转储到 YAML 文件。我熟悉 json 模块的界面,其中漂亮地打印一个 dict 就像 import json with open('o
Python 2.6 中是否有任何方法可以为 JSON 的 sort_keys 提供自定义键或 cmp 函数? 我有一个来自 JSON 的字典列表: [ { "key": "numberp
我是一名优秀的程序员,十分优秀!