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

基于冒号分割值的重复文本行去重需求(保留更早开始时间的重复姓名条目)

解决重复姓名保留最早开始时间的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:17:38