在Python2.6中,有没有办法为JSON的排序键提供自定义键或cmp函数?
我有一个来自JSON的dict列表,如下所示:
[
{
"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()
那样的自定义键。可能是一些定制的东西?我好像不能让它继续下去。
这有点难看,但如果托克兰的解决方案对你不起作用:
一个想法(用2.7测试):
见:OrderedDict+issue6105。
c_make_encoder
黑客似乎只是Python 2.x所需要的,并不是一个直接的解决方案,因为您必须为OrderedDict
s更改dict
s,但它可能仍然可用。我检查了json库(encode.py),命令是硬编码的:我也有同样的问题,
collections.OrderedDict
不适合这个任务,因为它按字母顺序排列所有的东西。所以我写了一些类似安德鲁·克拉克的解决方案:你这样使用它:
相关问题 更多 >
编程相关推荐