我有一个类似于
allsites = [
{
'A5': 'G',
'A10': 'G',
'site': 'example1.com',
'A1': 'G'
},
{
'A5': 'R',
'A10': 'Y',
'site': 'example2.com',
'A1': 'G'
}
]
我在json.dumps
中使用的:
data = { 'Author':"joe", 'data':allsites }
print json.dumps(data,sort_keys=True,indent=4, separators=(',', ': '))
这将输出以下JSON:
{
"Author": "joe",
"data": [
{
"A1": "G",
"A10": "G",
"A5": "G",
"site": "example1.com"
},
{
"A1": "G",
(...)
我希望这个JSON字符串的“data”部分通过一个自定义键(“alphabet”)进行排序,在上面的例子中是site, A1, A5, A10
,实际上看起来像:
{
"Author": "joe",
"data": [
{
"site": "example1.com",
"A1": "G",
"A5": "G",
"A10": "G"
},
{
"site": "example2.com",
"A1": "G",
(...)
我在Sorting FAQ中读到了关于自定义排序的内容,但它只是提供了一种重写比较函数的方法,更不用说我不知道如何将其插入到代码中。
怎么做?
由于python dict是无序的集合,因此请将^{} 与自定义排序一起使用:
印刷品:
我也遇到了同样的问题,并设计了一个轻量级通用解决方案:
首先,创建自定义订单排序函数的实例:
现在,实际排序:
。。。可以将其转储为JSON对象:
结果
更多
闭包是递归的。如双括号所示,可以指定嵌套在结构中的各种词典所需的排序顺序。
GitHub上的项目:https://github.com/laowantong/customsort
在Python3中,alecxe的答案不再有效。这应该是一个评论,但我缺乏声誉。
PEP 3113删除了函数签名中的元组解包,因此
现在必须
或类似的。
iteritems
也变成了items
。相关问题 更多 >
编程相关推荐