You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中按key1降序排序JSON内Baseball球员并输出字符串的问题

解决Python中JSON对象内指定字段按key降序排序且保留原格式的问题

我来帮你搞定这个需求!你需要保持JSON的对象结构完全不变,只是把Baseball对应的子对象里的球员按key1字段降序排列,对吧?下面是具体的实现步骤和代码示例:

核心思路

  1. 解析JSON字符串为Python字典,方便修改内部结构
  2. 提取Baseball下的球员键值对,按每个球员的key1值进行降序排序
  3. 将排序后的键值对重新组织成有序字典(兼容新旧Python版本),替换原字典中的Baseball部分
  4. 再将修改后的字典转回JSON字符串,确保格式和原结构一致

代码实现

假设你从数据源获取的JSON字符串是这样的(球员顺序混乱):

{
  "Sport": "Outdoor",
  "Baseball": {
    "Tom": {"key1": 3, "age": 28},
    "Jerry": {"key1": 7, "age": 25},
    "Alice": {"key1": 5, "age": 30}
  }
}

对应的Python处理代码:

import json
from collections import OrderedDict

# 模拟从数据源获取的JSON字符串
input_json = '''
{
  "Sport": "Outdoor",
  "Baseball": {
    "Tom": {"key1": 3, "age": 28},
    "Jerry": {"key1": 7, "age": 25},
    "Alice": {"key1": 5, "age": 30}
  }
}
'''

# 1. 解析JSON为Python字典
data_dict = json.loads(input_json)

# 2. 对Baseball下的球员按key1降序排序
# sorted()返回排序后的(key, value)元组列表,lambda指定排序依据为key1的值
sorted_players = sorted(
    data_dict['Baseball'].items(),
    key=lambda item: item[1]['key1'],
    reverse=True
)

# 3. 替换原Baseball内容为排序后的有序字典
# 若你的Python版本是3.7+,直接用dict(sorted_players)即可,3.7+字典默认保留插入顺序
data_dict['Baseball'] = OrderedDict(sorted_players)

# 4. 转回JSON字符串,indent用于格式化输出(可根据需求调整)
output_json = json.dumps(data_dict, ensure_ascii=False, indent=2)

# 输出结果
print(output_json)

运行结果

执行代码后,输出的JSON字符串中Baseball的球员会按key1降序排列,且完全保留原有的对象格式:

{
  "Sport": "Outdoor",
  "Baseball": {
    "Jerry": {"key1": 7, "age": 25},
    "Alice": {"key1": 5, "age": 30},
    "Tom": {"key1": 3, "age": 28}
  }
}

注意事项

  • 虽然JSON规范本身不保证对象键值对的顺序,但Python 3.7及以上版本的json模块会保留字典的插入顺序,下游消费函数只要能正确解析这种有序的JSON对象就能正常工作
  • 如果不需要格式化输出,可将json.dumps的indent参数设为None,得到紧凑的JSON字符串

内容的提问来源于stack exchange,提问作者Xandrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:36:27