基于冒号分割值的重复文本行去重需求(保留更早开始时间的重复姓名条目)
解决重复姓名保留最早开始时间的Python实现
这里有一个完整的实现方案,完美适配你的需求,同时还处理了时间格式不一致的小问题(比如示例里Sam的07:00.00):
with open("sample.txt", mode="r") as f: text = f.readlines() # 用字典存储每个name对应的最早条目:键是姓名,值是(标准化时间, 原始行内容) student_records = {} for line in text: line = line.strip() if not line: # 跳过空行,避免处理无效数据 continue line_data = line.split(":") # 提取并清理各个字段 name = line_data[0].strip() major = line_data[1].strip() # 统一时间格式:把可能的点替换成冒号,确保是HH:MM:SS格式 start_time = line_data[2].strip().replace(".", ":") mark = line_data[3].strip() # 检查当前姓名是否已存在记录 if name not in student_records: # 首次出现直接存入字典 student_records[name] = (start_time, line) else: # 对比时间,保留更早的条目 existing_time = student_records[name][0] # HH:MM:SS格式的字符串可以直接按字典序比较时间先后 if start_time < existing_time: student_records[name] = (start_time, line) # 输出最终结果 for record in student_records.values(): print(record[1])
关键实现细节说明:
- 字典去重+跟踪最早时间:用字典的键唯一性来处理重复姓名,值存储标准化后的时间和原始行,既方便时间对比,又能直接输出原始格式的内容。
- 时间格式兼容:把时间里的
.替换成:,解决输入中时间格式不一致的问题,确保所有时间都能正确比较。 - 健壮性处理:跳过空行,避免因文件末尾空行或无效行导致的报错。
- 时间比较逻辑:
HH:MM:SS格式的字符串可以直接用<比较,因为字符顺序和时间先后完全匹配(比如"05:00:00"肯定小于"06:00:00")。
测试你的示例输入后,代码会输出:
Dean : English : 05:00:00 : 70
内容的提问来源于stack exchange,提问作者Samael2021
相关产品推荐
相关产品推荐

