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

如何简化基于多层级键的Python sorted函数lambda表达式实现?

问题:能否简化这段Python排序代码?

原代码可正常运行但写法繁琐:

a = 0
for k in keys:
    a = a + 1
    if a == 1:
        k1 = k
    if a == 2:
        k2 = k
    if a == 3:
        k3 = k
if a == 1:
    list_of_dict = sorted(list_of_dict, key = lambda ele: ele[k1], reverse = rev)
if a == 2:
    list_of_dict = sorted(list_of_dict, key = lambda ele: ele[k1][k2], reverse = rev)
if a == 3:
    list_of_dict = sorted(list_of_dict, key = lambda ele: ele[k1][k2][k3], reverse = rev)

提问者说明:reverse参数引用了未展示的变量rev,推测ele的处理有简化方法,询问是否存在更简洁的写法。


简化写法

可以通过动态嵌套取值的方式统一处理不同长度的keys,彻底消除重复分支:

方法1:自定义取值函数

def get_nested_value(element, keys):
    current = element
    for key in keys:
        current = current[key]
    return current

list_of_dict = sorted(list_of_dict, key=lambda x: get_nested_value(x, keys), reverse=rev)

方法2:用reduce实现紧凑写法

from functools import reduce

list_of_dict = sorted(list_of_dict,
                      key=lambda ele: reduce(lambda val, k: val[k], keys, ele),
                      reverse=rev)

思路说明

  • 不管keys包含1个、2个还是3个键,都通过循环(或reduce)逐层取出嵌套字典的值,避免了重复的条件判断
  • 直接复用keys列表本身,无需额外定义k1/k2/k3变量,也不用统计键的数量a
  • 逻辑更通用,后续keys长度扩展到4个及以上时,代码无需修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:09:22