Python 对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",

我不熟悉JSON和Python,我正在尝试加载一个从磁盘创建的JSON文件,以便操作并输出到xml文件。我已经解决了大部分问题,除了我想在加载JSON文件后按某个值对其进行“排序”

json文件示例:

{
   "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
在加载时保留现有顺序。