首先按时间对记录进行排序。如果与最后一个条目的时间差不超过5分钟,则遍历记录并将它们附加到输出列表的最后一个子列表;否则将记录放入输出列表的新子列表中。
from datetime import datetime, timedelta
data = [
{'sys_id': 11, 'time': '1/1/18 6:00'},
{'sys_id': 11, 'time': '1/1/18 6:03'},
{'sys_id': 11, 'time': '1/1/18 6:07'},
{'sys_id': 11, 'time': '1/1/18 6:11'},
{'sys_id': 12, 'time': '1/1/18 15:25'},
{'sys_id': 12, 'time': '1/1/18 15:30'},
{'sys_id': 12, 'time': '1/1/18 15:33'},
{'sys_id': 12, 'time': '1/1/18 6:37'},
]
def to_time(string):
return datetime.strptime(string, '%m/%d/%y %H:%M')
data.sort(key=lambda record: to_time(record['time']))
output = []
for record in data:
if output and to_time(record['time']) - to_time(output[-1][-1]['time']) <= timedelta(minutes=5):
output[-1].append(record)
else:
output.append([record])
print(output)
这个输出(格式化后):
[
[{'sys_id': 11, 'time': '1/1/18 6:00'}, {'sys_id': 11, 'time': '1/1/18 6:03'}, {'sys_id': 11, 'time': '1/1/18 6:07'}, {'sys_id': 11, 'time': '1/1/18 6:11'}],
[{'sys_id': 12, 'time': '1/1/18 6:37'}],
[{'sys_id': 12, 'time': '1/1/18 15:25'}, {'sys_id': 12, 'time': '1/1/18 15:30'}, {'sys_id': 12, 'time': '1/1/18 15:33'}]
]