如何使用Python根据每个ID的score值对指定JSON数据排序?
按score从高到低排序JSON中Users节点的ID
实现思路
原JSON里的Users是字典结构,直接对字典排序无效,得先取出字典的键值对(用户ID和对应信息),再用sorted()函数根据score字段做降序排序。
完整代码示例
import json # 目标JSON数据 json_str = ''' { "Users": { "586393728470745123": { "score": 150, "name": "user1" }, "437465122378874895": { "score": 115, "name": "user2" }, "904032786854346795": { "score": 65, "name": "user3" }, "397930609894490122": { "score": 810, "name": "user4" }, "384814725164433408": { "score": 10, "name": "user5" }, "337104925387390977": { "score": 1, "name": "user6" }, "243452651541495808": { "score": 10, "name": "user7" } } } ''' # 解析JSON数据 data = json.loads(json_str) users_dict = data["Users"] # 按score降序排序:取出键值对,以每个用户的score为排序依据 sorted_users = sorted(users_dict.items(), key=lambda item: item[1]["score"], reverse=True) # 方式1:输出排序后的列表(直观查看) print("排序结果(按score从高到低):") for user_id, user_info in sorted_users: print(f"ID: {user_id} | 姓名: {user_info['name']} | 分数: {user_info['score']}") # 方式2:转成有序字典并生成新的JSON(保留字典结构) # Python3.7+ 普通字典默认保留插入顺序,直接转dict即可 sorted_users_dict = dict(sorted_users) new_json = json.dumps({"Users": sorted_users_dict}, indent=2) print("\n排序后的JSON:") print(new_json)
关键说明
users_dict.items():把Users字典转成可迭代的键值对集合,每个元素是(用户ID, 用户信息字典)的元组。key=lambda item: item[1]["score"]:指定排序依据为元组第二个元素(用户信息)里的score值。reverse=True:设置为降序排序,默认是升序。- 若使用Python3.6及以下版本,需导入
from collections import OrderedDict,用OrderedDict(sorted_users)生成有序字典。
内容的提问来源于stack exchange,提问作者PeeblYweeb
相关产品推荐
相关产品推荐

