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

如何按嵌套字典列表内的指定key对外部字典列表进行排序

Python 嵌套列表字典的多场景排序实现

你当前的问题核心是每个顶层条目下的data是包含多个字典的列表,排序前需要先明确以data列表中哪条数据的目标字段作为排序依据,常见的可选规则包括:

  • 取data中time最新/最早的条目对应字段值
  • 取data中所有条目对应字段的最大值/最小值
  • 取data中type为test/real的固定类型条目对应字段值

前置修正

你给出的示例数据中第二个data元素存在key笔误,tp:多了一个冒号,需要先修正为tp,否则会触发KeyError。

通用实现方案

全程使用Python标准库即可完成,无需额外依赖,我们以最常用的「取data中时间最新的条目对应字段值」作为排序规则为例,实现如下:

首先导入依赖的标准库:

from datetime import datetime

编写字段提取辅助函数:

def _get_sort_key(item, param):
    # 匹配顶层字段(如name)
    if param in item:
        return item[param]
    # 匹配data嵌套字段
    # 先将data按时间倒序,取最新的一条数据
    sorted_data = sorted(
        item["data"],
        key=lambda x: datetime.strptime(x["time"], "%a %b %d %H:%M:%S %Y"),
        reverse=True
    )
    latest_entry = sorted_data[0]
    # 时间字段转为datetime对象再返回,保证排序逻辑正确
    if param == "time":
        return datetime.strptime(latest_entry["time"], "%a %b %d %H:%M:%S %Y")
    return latest_entry[param]

修改你的sort_by方法:

def sort_by(self, param, rev=False):
    self.json_list = sorted(
        self.json_list,
        key=lambda k: _get_sort_key(k, param),
        reverse=rev
    )
    return self.json_list

其他规则适配

如果需要修改排序取值规则,只需要调整_get_sort_key中data部分的逻辑即可:

  • 取data中param字段最大值:return max(x[param] for x in item["data"])
  • 取data中type为real的条目值:return next(x[param] for x in item["data"] if x["type"] == "real")
  • 取data中第一个出现对应param的条目值:return next(x[param] for x in item["data"] if param in x)

异常兜底建议

如果存在部分data列表为空、或者部分data元素没有目标param字段的场景,可以加默认值兜底避免报错,比如:

# 找不到对应值时,数值类型默认返回0,字符串默认返回空串
return latest_entry.get(param, 0 if param in ("tp", "df", "db") else "")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:39:03