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

如何基于可配置的动态key对嵌套字典列表结构的响应数据进行排序

实现思路

  • 先定义通用的嵌套字段取值工具,支持按字段路径(用.分隔层级)从任意嵌套结构里取排序键值,对于列表类型的层级可以指定索引取值(比如要取第一个地址的城市就用addresses.0.city)
  • 排序逻辑直接复用Python内置的sorted方法,通过配置的排序字段动态生成排序key,支持灵活切换排序字段、调整正/倒序。

完整实现代码

# 示例原始数据
data = [
    {"type":"single",
    "ra":"SI-11", 
    "name":{
        "f_name":"Jon",
        "l_name":"Devi", 
        "prefix":"Mr"},
    "addresses":[
        {"address": "123St","city": "New York","state": "NY"},
        {"address": "14St","city": "New York","state": "NY"}
    ],
    "racks": ["racks1", "rack2"],
    },
    {"type":"multiple",
    "ra":"SI-44", 
    "name":{
        "f_name":"Patrik",
        "l_name":"Dev", 
        "prefix":"Mr"},
    "addresses":[
        {"address": "333St","city": "New York","state": "NY"},
        {"address": "14000St","city": "New York","state": "NY"}
    ],
    "racks": ["racks1", "rack2"],
    }
]

def get_nested_value(item: dict, field_path: str):
    """从嵌套字典/列表结构中按路径取值"""
    keys = field_path.split(".")
    value = item
    for key in keys:
        # 如果当前层级是列表,就把key转成数字索引取值
        if isinstance(value, list):
            try:
                key = int(key)
                value = value[key]
            except (IndexError, ValueError):
                # 索引不存在或者转数字失败返回空值,避免排序报错
                return ""
        else:
            # 字典层级直接按键取值,不存在返回空值
            value = value.get(key, "")
    return value

def sort_by_config(data: list, sort_field: str, reverse: bool = False):
    """
    按配置字段对数据排序
    :param data: 待排序的原始数据列表
    :param sort_field: 排序字段路径,支持嵌套:
        一级字段直接传:"type" / "ra"
        二级嵌套字典字段:"name.f_name" / "name.l_name"
        列表内嵌套字段:"addresses.0.city"(取第一个地址的城市)
    :param reverse: 是否倒序,默认False正序
    :return: 排序后的数据
    """
    return sorted(data, key=lambda x: get_nested_value(x, sort_field), reverse=reverse)

调用示例

# 按一级字段type排序
sorted_by_type = sort_by_config(data, "type")
# 按name下的f_name排序
sorted_by_fname = sort_by_config(data, "name.f_name")
# 按第一个地址的city倒序排序
sorted_by_city = sort_by_config(data, "addresses.0.city", reverse=True)

扩展说明

  • 如果需要支持多字段排序,只需要把sort_field改成列表类型,key返回对应多个字段的元组即可
  • 非字符串类型的字段(比如数字、日期)排序逻辑也可以直接复用,不需要改底层取值代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:30:04