使用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
相关产品推荐
相关产品推荐

