gpt4 book ai didi

Python 按两个键值对 JSON 列表进行排序

转载 作者:行者123 更新时间:2023-12-01 04:50:57 24 4
gpt4 key购买 nike

我有一个如下所示的 JSON 列表:

[{ "id": "1", "score": "100" },
{ "id": "3", "score": "89" },
{ "id": "1", "score": "99" },
{ "id": "2", "score": "100" },
{ "id": "2", "score": "59" },
{ "id": "3", "score": "22" }]

我想先对id进行排序,我用了

sorted_list = sorted(json_list, key=lambda k: int(k['id']), reverse = False)

这只会按id对列表进行排序,但是根据id,我也想对分数进行排序,我想要的最终列表是这样的:

[{ "id": "1", "score": "100" },
{ "id": "1", "score": "99" },
{ "id": "2", "score": "100" },
{ "id": "2", "score": "59" },
{ "id": "3", "score": "89" },
{ "id": "3", "score": "22" }]

因此,对于每个 id,也对他们的分数进行排序。知道如何做到这一点吗?

最佳答案

使用添加第二个排序键-int(k["score"])的元组在打破平局时反转顺序并删除reverse=True:

sorted_list = sorted(json_list, key=lambda k: (int(k['id']),-int(k["score"])))

[{'score': '100', 'id': '1'},
{'score': '99', 'id': '1'},
{'score': '100', 'id': '2'},
{'score': '59', 'id': '2'},
{'score': '89', 'id': '3'},
{'score': '22', 'id': '3'}]

因此,我们主要按 id 从最低到最高排序,但我们使用 score 从最高到最低排序。字典也是无序的,因此当您在不使用 OrderedDict 的情况下打印时,无法将 id 放在分数之前。

或者使用 pprint:

from pprint import pprint as pp

pp(sorted_list)

[{'id': '1', 'score': '100'},
{'id': '1', 'score': '99'},
{'id': '2', 'score': '100'},
{'id': '2', 'score': '59'},
{'id': '3', 'score': '89'},
{'id': '3', 'score': '22'}]

关于Python 按两个键值对 JSON 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com