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

Python如何实现字典列表按year升序+字母数字键多级排序

Python字典列表自定义多级排序实现方案

核心排序规则

  • 第一优先级:按字典中year键的数值做升序排列
  • 第二优先级:按字典中P+数字格式的键做自然排序,避免字符串排序下P10排在P9之前的问题

实现代码

# 原始待排序数据
raw_data = [
    {"P9": 0, "year": 2023},
    {"P13": 0, "year": 2023},
    {"P10": 0, "year": 2023},
    {"P11": 121200, "year": 2022},
    {"P12": 0, "year": 2023},
]

def get_sort_key(item):
    # 第一排序维度:year升序
    sort_level1 = item["year"]
    # 提取P开头的键,截取P后的数字转整数作为第二排序维度
    p_key = next(key for key in item.keys() if key.startswith("P"))
    sort_level2 = int(p_key[1:])
    # 返回元组作为排序键,Python会按元组元素顺序依次匹配优先级
    return (sort_level1, sort_level2)

# 执行排序
sorted_result = sorted(raw_data, key=get_sort_key)

结果验证

运行上述代码后,sorted_result的输出和预期完全一致:

[
    {"P11": 121200, "year": 2022},
    {"P9": 0, "year": 2023},
    {"P10": 0, "year": 2023},
    {"P12": 0, "year": 2023},
    {"P13": 0, "year": 2023},
]

关键说明

  • 为什么转整数能解决自然排序问题:字符串排序是逐字符对比ASCII值,对比"P10"和"P9"时,第二位字符'1'的ASCII码小于'9',就会出现P10排在P9前的反直觉结果;把P后的数字转成整数后,排序会直接按照数字实际大小对比,符合日常认知的排序逻辑。
  • 代码中用next()提取P开头的键,适配当前每个字典有且仅有一个P+数字格式键的场景,如果后续数据结构变化存在多个P开头键,可以按需调整键的提取逻辑。
  • Python内置sorted函数默认升序排列,不需要额外加reverse参数,正好匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:24:18