如何将日期与时间字符串列表转换为日期为键的字典(处理跨天时间)
解决日期-时间分组字典的生成问题
先明确下需求核心:我们要把给定的时间列表按日期分组,同一个日期下的时间是递增顺序的;一旦遇到时间回退(当前时间比前一个时间小),就自动切换到日期列表里的下一个日期作为键。
实现思路
- 先初始化结果字典,给每个日期对应一个空列表;
- 用一个索引变量记录当前正在使用的日期位置,默认从第一个日期开始;
- 遍历时间列表时,记录前一个时间用于比较:
- 第一个时间直接加入当前日期的列表;
- 后续每个时间和前一个对比,如果当前时间更小,说明要切换到下一个日期;
- 把当前时间加入对应日期的列表,再更新前一个时间的值。
Python代码实现
dates = ['2019/07/27', '2019/07/29'] times = ['06:55:40', '06:55:41', '08:48:33', '08:48:33', '09:02:54', '09:02:54', '09:02:54', '10:02:19', '10:02:20', '07:34:52', '07:34:52', '07:35:03', '09:22:19', '09:22:19', '09:22:19', '09:22:23', '11:17:24', '11:17:27', '13:24:57'] # 初始化结果字典,每个日期对应空列表 result = {date: [] for date in dates} current_date_idx = 0 prev_time = None for time in times: if prev_time is None: # 第一个时间直接加入当前日期的列表 result[dates[current_date_idx]].append(time) prev_time = time else: # 时间回退时切换到下一个日期 if time < prev_time: current_date_idx += 1 # 将当前时间加入对应日期列表 result[dates[current_date_idx]].append(time) prev_time = time print(result)
运行结果
执行代码后会得到你期望的输出:
{'2019/07/27': ['06:55:40', '06:55:41', '08:48:33', '08:48:33', '09:02:54', '09:02:54', '09:02:54', '10:02:19', '10:02:20'], '2019/07/29': ['07:34:52', '07:34:52', '07:35:03', '09:22:19', '09:22:19', '09:22:19', '09:22:23', '11:17:24', '11:17:27', '13:24:57']}
小提示
- 这里直接用字符串比较时间是可行的,因为
HH:MM:SS格式的字符串,字典序和时间先后顺序完全一致; - 如果你的日期列表长度可能不够(比如时间分组数比日期数多),可以额外加个边界判断,避免索引越界报错。
内容的提问来源于stack exchange,提问作者Chris Macaluso
相关产品推荐
相关产品推荐

