我有一个这种格式的时间戳列表:'2016-08-01 13:02:57'或“%Y-%m-%d-%H-%M-%S-%f”
我想获得每天的第一次也是最后一次。因此,如果有两天8/1和7/29,该函数将返回4个值。例如:
8/1
first: '2016-08-01 13:02:57'
last: '2016-08-01 13:08:44'
7/29
first: '2016-07-29 14:34:02'
last: '2016-07-29 14:37:35'
第一次是当天首先出现的那一次,最后一次是当天最后一次出现的那次。
答案 0 :(得分:1)
按年 - 月 - 日分组,然后获得最小值和最大值:
from collections import defaultdict
d = defaultdict(list)
dates = ['2016-08-01 13:02:54',............]
for dte in dates:
key, _ = dte.split()
d[key].append(dte)
for k,v in d.items():
print(min(v), max(v))
由于日期格式不需要转换为日期时间,因此词典比较工作正常。你可以创建一个在一个循环中执行min和max的函数,但它可能没有内置函数那么快。
答案 1 :(得分:1)
词法比较是您的日期时间格式给出最小和最大日期。因此,您只需将每个日期时间分组在一个列表中的相同日期:
from collections import defaultdict
dates = ['2016-08-01 13:02:57', '2016-08-01 13:08:44', ...]
dates_and_times = defaultdict(list)
for date in dates:
d, t = date.split()
dates_and_times[d].append(t)
for date, times in dates_and_times.items():
print(date, min(times))
print(date, max(times))
答案 2 :(得分:-1)
为了明智地对您的数据进行分组,我可能会以下列方式使用字典:首先将字符串分为日期的一半和一半。
d = dict()
for item in L:
if item in d:
d[item] = [time]
else:
d[item].append(time)
然后你有dict将某些日期映射到一个时间列表。然后使用一些日期时间函数可能很简单,它可以执行max(list)和min(list)来给你最早和最晚的时间。