【问题标题】:Sorting a JSON Object对 JSON 对象进行排序
【发布时间】:2018-02-13 00:48:22
【问题描述】:

我是 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"
   }
}

我想做的是按“完成”键对“树”进行排序。

JSONFILE = "file.json"

with open(CHANS) as json_file:
    tree = json.load(json_file)

【问题讨论】:

标签: python arrays json sorting


【解决方案1】:

取决于您如何“使用”tree 字典。你用的是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 值/对象,所以只需使用它们即可。

如果你遍历排序字典一次,上面的 sn-ps 就可以正常工作。但是,如果您需要多次访问它,那么我会遵循 ~Jean-François 的建议并使用 OrderedDict,例如:

from collections import OrderedDict
tree = OrderedDict(sorted(tree.items(), key=lambda t: int(t[1]['finished'])))

这样排序操作(可以说是最昂贵的)只进行一次。

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2014-09-27
    • 1970-01-01
    • 2013-07-08
    • 2021-09-16
    • 2011-05-12
    • 2013-07-15
    • 2020-03-06
    相关资源
    最近更新 更多