我有一个日期列表和一个时间列表。当小时属于不同的第二天时(因此,当一个时间小于前一个时间时),我如何创建一个以键为日期、以时间为值、以下一个日期为键的字典?这两个列表当前都是字符串。
我的日期列表:
['2019/07/27',
'2019/07/29',]我的次数列表:
['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',]预期输出:
{'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',]}发布于 2019-08-09 23:07:03
time_groups = []
grp = []
previous_time = None
for time in times:
if previous_time is None or time > previous_time:
grp.append(time)
else:
time_groups.append(grp)
grp = []
previous_time = time
output = {d:t for d,t in zip(dates,time_groups)}发布于 2019-08-09 23:35:36
您可以使用此函数执行此操作。如果为了进行比较而将它们转换为datetime对象,则会更容易:
from datetime import datetime as dt
def sort_dates(ds, ts):
limit = dt.strptime("23:59:59", "%H:%M:%S").time()
res = {}
i = -1
for time in ts:
current = dt.strptime(time, "%H:%M:%S").time()
if current < limit:
i+=1
res[ds[i]] = []
res[d[i]].append(time)
limit = current
return res
d = ['2019/07/27', '2019/07/29']
t = ['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']
res = sort_dates(d, t)发布于 2019-08-10 00:40:53
我的解决方案如下。我把时间列表切开了。
i = 1
j = 0
length = len(times)
while i < length:
if times[i-1] > times[i] or i is length-1: # i is the index of the start time on the next day
dict[dates[j]] = times[:i]
times = times[i:]
j += 1
i = 1
length = len(times)
else:
i += 1https://stackoverflow.com/questions/57432663
复制相似问题