如何基于日期列表对Python3中的时间列表分组求和并判断时长
按日期分组求和时间并做阈值判断的Python实现
没问题,咱们来一步步解决这个问题——首先要按日期分组计算累计时间,再根据是否达到8小时执行不同操作。这里用基础Python就能实现,核心思路是用字典来存储每个日期对应的总秒数,既方便分组又容易求和:
完整代码示例
Date = ['01-01-2019', '02-01-2019', '02-01-2019'] Time = ['07:00:00', '06:00:00','02:00:00'] # 初始化字典,用于存储每个日期的累计总秒数 date_time_totals = {} # 遍历配对的日期和时间,计算累计秒数 for date, time_str in zip(Date, Time): # 将时间字符串转为总秒数,复用你原有的转换逻辑 h, m, s = map(int, time_str.split(":")) total_seconds = 3600 * h + 60 * m + s # 更新字典:日期存在则累加,不存在则初始化 if date in date_time_totals: date_time_totals[date] += total_seconds else: date_time_totals[date] = total_seconds # 定义8小时对应的秒数阈值(避免字符串比较的潜在问题) threshold_seconds = 8 * 3600 # 遍历每个日期的累计数据,执行判断和操作 for date, total_sec in date_time_totals.items(): # 将总秒数格式化为HH:MM:SS字符串 hours = total_sec // 3600 minutes = (total_sec // 60) % 60 seconds = total_sec % 60 formatted_time = f"{hours:02d}:{minutes:02d}:{seconds:02d}" # 核心判断逻辑 if total_sec >= threshold_seconds: # 替换成你实际需要执行的操作 print(f"📅 {date} | 累计时间 {formatted_time} → 达到8小时标准,执行操作A") else: # 替换成你实际需要执行的操作 print(f"📅 {date} | 累计时间 {formatted_time} → 未达8小时标准,执行操作B")
代码说明
- 分组求和:用
zip(Date, Time)确保日期和时间一一对应,字典date_time_totals自动完成分组,每个日期对应其所有时间的秒数总和,比手动写多个if判断更简洁高效; - 阈值比较:把8小时转换成秒数(28800秒)来比较,比直接比较时间字符串更可靠——比如遇到超过24小时的累计时间(比如
25:30:00),字符串比较会出错,但秒数比较完全没问题; - 时间格式化:用f-string格式化时间,语法更直观,也支持超过24小时的场景(比如累计30小时会显示
30:00:00)。
运行结果
执行代码后会输出:
📅 01-01-2019 | 累计时间 07:00:00 → 未达8小时标准,执行操作B 📅 02-01-2019 | 累计时间 08:00:00 → 达到8小时标准,执行操作A
完全符合你想要的效果,你只需要把print语句替换成实际的业务逻辑即可。
内容的提问来源于stack exchange,提问作者noobtalgic
相关产品推荐
相关产品推荐

