Python 对JSON对象排序
我不熟悉JSON和Python,我正在尝试加载一个从磁盘创建的JSON文件,以便操作并输出到xml文件。我已经解决了大部分问题,除了我想在加载JSON文件后按某个值对其进行“排序” json文件示例:Python 对JSON对象排序,python,arrays,json,sorting,Python,Arrays,Json,Sorting,我不熟悉JSON和Python,我正在尝试加载一个从磁盘创建的JSON文件,以便操作并输出到xml文件。我已经解决了大部分问题,除了我想在加载JSON文件后按某个值对其进行“排序” json文件示例: { "0" : { "name": "John Doe", "finished": "4", "logo": "http://someurl.com/icon.png" }, "1" : { "name": "Jane Doe",
{
"0" : {
"name": "John Doe",
"finished": "4",
"logo": "http://someurl.com/icon.png"
},
"1" : {
"name": "Jane Doe",
"finished": "10",
"logo": "http://anotherurl.com/icon.png"
},
"2" : {
"name": "Jacob Smith",
"finished": "3",
"logo": "http://example.com/icon.png"
}
}
我要做的是按“finished”键对“tree”进行排序
JSONFILE = "file.json"
with open(CHANS) as json_file:
tree = json.load(json_file)
取决于您如何“使用”树
字典。您使用的是tree.keys()
、tree.values()
还是tree.items()
tree.keys()
ordered_keys=sorted(tree.keys(),key=lambda k:int(tree[k]['finished']))
tree.values()
ordered_keys=sorted(tree.values(),key=lambda v:int(v['finished']))
tree.items()
ordered_keys=sorted(tree.items(),key=lambda t:int(t[1]['finished']))
您只需记住,JSON是实际文件中的内容,而JSON.load()
的结果只是一个Python值/对象,所以只需使用它们即可
如果您浏览一次已排序的词典,上面的代码片段就可以了。但是,如果您需要多次访问它,那么我会按照~Jean François的建议,使用OrderedICT
,例如:
从集合导入订单数据
tree=OrderedDict(已排序(tree.items(),key=lambda t:int(t[1]['finished']))
这样,排序操作(可以说是最昂贵的)只需执行一次。可能是的重复,但您无法对其进行排序,因为它是一个字典字典,而不是一个字典列表。除非您希望使用
collections.OrderedDict
更好地保持文件中的排序,并使用object\u pairs\u hook
在加载时保留现有顺序。