如何在值为列表的字典中获取评分最高的前2名员工详情
员工数据排序与顶级员工信息输出
问题背景
给定如下员工字典:
import datetime emp_dict = {'Name1' : ['2','M','10',5,datetime.date(2002, 10, 10)], 'Name2' : ['3','G','5',7,datetime.date(2003, 10, 10)], 'Name3' : ['1','M','15',9,datetime.date(2004, 10, 10)], 'Name4' : ['4','G','3',3,datetime.date(2010, 10, 10)], 'Name5' : ['5','M','5',8,datetime.date(2006, 10, 10)]}
字典中每个键为员工姓名,对应值是包含多类型数据的列表,各索引对应的字段定义:
Index 0 - ID Index 1 - 性别(Gender) Index 2 - 部门(Department) Index 3 - 评分(Rating) Index 4 - 入职日期(DoJ)
需求
按评分(Rating)从高到低排序员工数据,输出评分最高的前2名员工的详细信息,格式需匹配如下期望输出:
Name3 ID : 1 Gender : M Department : 15 Rating : 9 DoJ : (2004/10/10) Name5 ID : 5 Gender : M Department : 5 Rating : 8 DoJ : (2006/10/10)
解决方案
使用sorted()函数结合自定义排序规则实现,代码如下:
import datetime emp_dict = {'Name1' : ['2','M','10',5,datetime.date(2002, 10, 10)], 'Name2' : ['3','G','5',7,datetime.date(2003, 10, 10)], 'Name3' : ['1','M','15',9,datetime.date(2004, 10, 10)], 'Name4' : ['4','G','3',3,datetime.date(2010, 10, 10)], 'Name5' : ['5','M','5',8,datetime.date(2006, 10, 10)]} # 按评分降序排序,取前2名员工 sorted_employees = sorted(emp_dict.items(), key=lambda x: x[1][3], reverse=True)[:2] # 格式化输出员工信息 for name, info in sorted_employees: print(name) print() print(f"ID : {info[0]}") print(f"Gender : {info[1]}") print(f"Department : {info[2]}") print(f"Rating : {info[3]}") # 将日期格式转为YYYY/MM/DD并包裹括号 print(f"DoJ : ({info[4].strftime('%Y/%m/%d')})") print()
代码说明
- 排序逻辑:
sorted()函数通过key=lambda x: x[1][3]指定以员工信息列表的第4个元素(索引3)即评分为排序依据,reverse=True实现降序排列,切片[:2]筛选出前2名员工。 - 格式化输出:遍历排序后的员工数据,按指定格式打印姓名与各字段,日期通过
strftime('%Y/%m/%d')转换为要求的格式并添加括号。
内容的提问来源于stack exchange,提问作者Jerin Joy
相关产品推荐
相关产品推荐

