Python:按CSV中START_DATE对字典值的工作列表按时间排序
如何按时间顺序为员工的工作经历列表排序?
看起来你已经完成了员工工作经历的分组和去重,只差最后一步按时间排序的环节。让我帮你修改代码,实现按START_DATE升序排列每个员工的工作列表:
问题回顾
你的jobData.csv数据(修正为标准CSV逗号分隔格式):
EMPLOYEE,START_DATE,END_DATE,JOB,DIVISION Tom,20180101,20191028,Job1,Div_B Tom,20160101,20171231,Job1,Div_B Tom,20150609,20151231,Job1,Div_B Dick,20191001,,Job4,Div_D Dick,20190609,20190930,Job3,Div_C Dick,20170309,20180608,Job2,Div_A Dick,20160609,20170308,Job1,Div_B Harry,20180701,,Job2,Div_A Harry,20180101,20180630,Job2,Div_A Harry,20160101,20171231,Job1,Div_A
你的目标是生成这样的字典:
d = { 'Tom': ['Job1'], 'Dick': ['Job1', 'Job2', 'Job3', 'Job4'], 'Harry': ['Job1', 'Job2'] }
修改后的代码
import csv from collections import defaultdict # 用defaultdict自动初始化员工对应的空列表 employee_jobs = defaultdict(list) with open('jobData.csv', 'r') as jobDataFile: jobDataReader = csv.reader(jobDataFile) next(jobDataReader) # 跳过表头行 # 第一步:收集每个员工的(开始日期, 工作岗位)配对 for row in jobDataReader: employee = row[0] start_date = row[1] job = row[3] employee_jobs[employee].append( (start_date, job) ) # 第二步:对每个员工的记录按日期排序,再去重生成有序工作列表 for emp, records in employee_jobs.items(): # 按START_DATE升序排序(YYYYMMDD格式的字符串可直接按字典序比较,等价于时间顺序) sorted_records = sorted(records, key=lambda x: x[0]) # 去重并保留时间顺序 unique_jobs = [] for date, job in sorted_records: if job not in unique_jobs: unique_jobs.append(job) employee_jobs[emp] = unique_jobs # 转换为普通字典并查看结果 print(dict(employee_jobs))
关键修改点说明
- 用
defaultdict简化代码:省去了原代码中判断员工是否已在字典里的繁琐步骤,自动为新员工创建空列表。 - 绑定日期与工作:先把每个员工的
START_DATE和JOB作为元组存入列表,这样后续可以基于日期排序。 - 按日期排序:由于你的日期是
YYYYMMDD格式的字符串,直接排序就和时间顺序完全一致,不用额外转换日期格式。 - 排序后再去重:确保去重后的工作列表是严格按照时间先后顺序排列的。
输出结果
运行代码后会得到你预期的字典:
{'Tom': ['Job1'], 'Dick': ['Job1', 'Job2', 'Job3', 'Job4'], 'Harry': ['Job1', 'Job2']}
内容的提问来源于stack exchange,提问作者William Ernst
相关产品推荐
相关产品推荐

