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

使用Lambda Sorted按年龄排序失效,请求排查代码错误

问题分析与修复

先明确你代码里的几个核心问题:

  • 调用展示函数时拼写错误:mostar() 应该是 show(),这会直接触发报错
  • show函数逻辑完全错误:你每次循环只把单个员工转成字典放进列表,对仅含一个元素的列表排序等于没做任何排序操作
  • 使用Python内置类型名list作为变量名,容易引发意外冲突,建议改为employees这类语义化名称

修正后的代码

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

employees = []

def show():
    # 一次性将所有员工转为字典列表,再整体按年龄倒序排序
    employee_dicts = [{'Name': emp.name, 'Age': emp.age} for emp in employees]
    sorted_employees = sorted(employee_dicts, key=lambda x: x['Age'], reverse=True)
    for emp in sorted_employees:
        print(emp)

while True:
    print("Menu")
    print("1. Register")
    print("2. Show")
    print("3. Exit")
    try:
        option = int(input())
    except ValueError:
        print("请输入有效数字选项")
        continue
        
    if option == 1:
        print("Register")
        n = input("Ingrese el nombre del empleado: ")
        try:
            e = int(input("Ingrese la edad del empleado: "))
        except ValueError:
            print("请输入有效的年龄数字")
            continue
        emp = Employee(n, e)
        employees.append(emp)
        print("Empleado guardado con éxito!")

    elif option == 2:
        print("Mostrar")
        show()

    elif option == 3:
        break
    else:
        print("Option inválid")

关键修改说明

  • 类名改为Employee(符合Python大驼峰命名规范),变量list改为employees避免内置类型冲突
  • 重构show函数:先批量转换所有员工为字典列表,再对整个列表按Age倒序排序,最后遍历打印结果
  • 修复函数调用拼写错误:mostar() → show()
  • 添加输入异常处理,避免用户输入非数字时程序直接崩溃
  • 把循环条件i == 0改为while True,用break退出循环,逻辑更清晰

另外,也可以直接对员工对象列表排序,无需转字典,写法更简洁:

def show():
    # 直接对Employee对象列表排序,key取对象的age属性
    sorted_employees = sorted(employees, key=lambda x: x.age, reverse=True)
    for emp in sorted_employees:
        print(f"Name: {emp.name}, Age: {emp.age}")

内容的提问来源于stack exchange,提问作者Juan Pablo Dávila Iriarte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:09:21