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

如何在Python中按动态多参数对字典列表进行排序

动态多键排序字典列表的实现

实现思路

你可以通过动态生成排序用的key函数解决这个问题:利用生成器表达式将多个排序键对应的值打包成元组,元组的比较会按元素顺序依次进行,完美匹配多键排序的需求,避免了逐个排序导致的结果覆盖问题。

完整函数实现

def processList(l, sortId=None):
    # 复制原列表,避免修改输入的原始列表
    sorted_list = l.copy()
    if sortId is not None:
        # 兼容单个键字符串的输入,转为列表统一处理
        if isinstance(sortId, str):
            sort_keys = [sortId]
        elif isinstance(sortId, (list, tuple)):
            sort_keys = sortId
        else:
            # 无效的sortId类型,直接返回原列表
            return sorted_list
        # 动态生成key函数:返回包含所有排序键对应值的元组
        sorted_list.sort(key=lambda x: tuple(x[key] for key in sort_keys))
    return sorted_list

测试示例

首先定义测试用的字典列表:

test_list = [
    {'name': 'alpha', 'price': 200, 'date': '2022-02-01'},
    {'name': 'beta', 'price': 400, 'date': '2022-03-01'},
    {'name': 'delta', 'price': 500, 'date': '2022-05-01'},
    {'name': 'zeta', 'price': 400, 'date': '2022-02-10'},
    {'name': 'kappa', 'price': 500, 'date': '2022-01-31'}
]

1. 按单个键name排序

result = processList(test_list, sortId='name')
print(result)

输出:

[
    {'name': 'alpha', 'price': 200, 'date': '2022-02-01'},
    {'name': 'beta', 'price': 400, 'date': '2022-03-01'},
    {'name': 'delta', 'price': 500, 'date': '2022-05-01'},
    {'name': 'kappa', 'price': 500, 'date': '2022-01-31'},
    {'name': 'zeta', 'price': 400, 'date': '2022-02-10'}
]

2. 按price+date组合排序

result = processList(test_list, sortId=['price', 'date'])
print(result)

输出:

[
    {'name': 'alpha', 'price': 200, 'date': '2022-02-01'},
    {'name': 'zeta', 'price': 400, 'date': '2022-02-10'},
    {'name': 'beta', 'price': 400, 'date': '2022-03-01'},
    {'name': 'kappa', 'price': 500, 'date': '2022-01-31'},
    {'name': 'delta', 'price': 500, 'date': '2022-05-01'}
]

补充说明

  • 使用l.copy()是为了保持函数的纯性,避免修改外部传入的原始列表;如果业务允许原地修改,可以直接对l调用sort()方法。
  • 函数兼容单个键字符串和多键列表/元组的输入,同时对无效的sortId类型做了容错处理。

内容的提问来源于stack exchange,提问作者Varun Pius Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:10:27