最初にレコードを時間順に並べ替えます。次に、レコードを繰り返し処理し、最後のエントリまでの時間差が 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'}]
]