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

如何在Python中按指定key值排序复杂JSON(优先x11算法)

实现按algo字段排序(x11优先)的方案

放心,这个需求超容易实现的!你已经掌握基础排序方法,只是这个JSON里的data是键值对对象(不是数组),所以只需要多一步“对象转数组”的操作,排序后再转回结构就搞定了。

核心思路

  1. 把data对象转换成可排序的数组(因为对象本身不能直接排序)
  2. 用排序规则把所有algo为x11的项排在最前面
  3. 把排序后的数组转回对象,放回原JSON结构

具体实现示例

JavaScript版本(适合前端/Node.js环境)

// 假设你已经把JSON解析成了jsonData变量
const originalData = jsonData.data;

// 将对象转为[key, value]格式的数组
const dataArray = Object.entries(originalData);

// 排序:x11优先,其他项保持原相对顺序
dataArray.sort((a, b) => {
  const isX11A = a[1].info.algo === 'x11';
  const isX11B = b[1].info.algo === 'x11';
  
  if (isX11A && !isX11B) return -1; // a是x11,排前面
  if (!isX11A && isX11B) return 1;  // b是x11,排前面
  return 0; // 都不是x11,保持原顺序
});

// 把排序后的数组转回对象
const sortedData = Object.fromEntries(dataArray);

// 更新原JSON的data字段
jsonData.data = sortedData;

// 输出格式化后的结果
console.log(JSON.stringify(jsonData, null, 2));

Python版本(适合后端/数据处理场景)

import json

# 假设你的JSON字符串存储在json_str中
json_data = json.loads(json_str)
original_data = json_data['data']

# 将字典转为[(key, value)]格式的列表
data_list = list(original_data.items())

# 排序:x11项的排序权重设为0,其他为1,这样x11会排在最前面
data_list.sort(key=lambda item: 0 if item[1]['info']['algo'] == 'x11' else 1)

# 转回字典(Python 3.7+字典默认保留插入顺序)
sorted_data = dict(data_list)

# 更新原数据并输出
json_data['data'] = sorted_data
print(json.dumps(json_data, indent=2))

补充说明

  • 如果你的运行环境不支持Object.fromEntries(比如旧版浏览器),可以用reduce手动构建对象:
    const sortedData = dataArray.reduce((acc, [key, value]) => {
      acc[key] = value;
      return acc;
    }, {});
    
  • Python 3.6及以下版本的字典不保留插入顺序,这时可以用collections.OrderedDict来替代普通字典:
    from collections import OrderedDict
    sorted_data = OrderedDict(data_list)
    

这个逻辑完全基于你已经掌握的基础排序知识,只是多了对象和数组之间的转换步骤,上手非常快!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:18:23