很抱歉,尽管我在全面搜索后仍无法找到答案,但已经问过类似的问题。我一直在努力将以下字典导出到JSON文件中,并按降序对键进行排序。该文件需要在Python外可读,因此不能使用pickle。
我正在使用Python3.7,并且尝试使用simplejson和json库将嵌套的dict转储到json文件中,尽管失败了。 Pickle似乎可以工作,尽管它导出的二进制文件在Python之外是不可读的。词典称为“现有”。
with open('Entries_2.json', 'w') as outfile:
simplejson.dump(existing,outfile,item_sort_key=simplejson.simple_first)
outfile.close()
with open('Entries.json', 'w') as outfile:
json.dump(existing, outfile, sort_keys=True, indent=4)
outfile.close()
以上两种方法都会产生相同的结果:
{
"Entries": {
"2019/01/23": {
"Result-9595905890": {
"count": 4,
"time": "2019/01/23 03:32:32"
}
},
"2019/01/24": {
"Result-9607169713": {
"count": 21,
"time": "2019/01/24 03:31:34"
},
"Result-9611777668": {
"count": 23,
"time": "2019/01/24 12:58:49"
}
},
"2019/01/25": {
"Result-9618433556": {
"count": 21,
"time": "2019/01/25 03:31:27"
}
}
}
}
尽管reverse = True选项在两个转储选项中均不起作用。 我需要的是:
{
"Entries": {
"2019/01/25": {
"Result-9618433556": {
"count": 21,
"time": "2019/01/25 03:31:27"
}
},
"2019/01/24": {
"Result-9607169713": {
"count": 21,
"time": "2019/01/24 03:31:34"
},
"Result-9611777668": {
"count": 23,
"time": "2019/01/24 12:58:49"
}
},
"2019/01/23": {
"Result-9595905890": {
"count": 4,
"time": "2019/01/23 03:32:32"
}
}
}
}
有人遇到过类似的斗争吗?
答案 0 :(得分:0)
import json, collections
existing = {
"Entries": {
"2019/01/23": {
"Result-9595905890": {
"count": 4,
"time": "2019/01/23 03:32:32"
}
},
"2019/01/24": {
"Result-9607169713": {
"count": 21,
"time": "2019/01/24 03:31:34"
},
"Result-9611777668": {
"count": 23,
"time": "2019/01/24 12:58:49"
}
},
"2019/01/25": {
"Result-9618433556": {
"count": 21,
"time": "2019/01/25 03:31:27"
}
}
}
}
new_entries = collections.OrderedDict(reversed(sorted(existing['Entries'].items()))) # if you want reversed sorted
existing['Entries'] = new_entries
with open('Entries.json', 'w') as outfile:
json.dump(existing, outfile, indent=4)
顺便说一句,当您执行with open('Entries.json', 'w') as outfile:
时,它将在with语句完成后自动关闭outfile,因此您无需显式关闭它。
输出:
{
"Entries": {
"2019/01/25": {
"Result-9618433556": {
"count": 21,
"time": "2019/01/25 03:31:27"
}
},
"2019/01/24": {
"Result-9607169713": {
"count": 21,
"time": "2019/01/24 03:31:34"
},
"Result-9611777668": {
"count": 23,
"time": "2019/01/24 12:58:49"
}
},
"2019/01/23": {
"Result-9595905890": {
"count": 4,
"time": "2019/01/23 03:32:32"
}
}
}
}