Django / Python:按时间段对结果进行分组

Django / Python : group results by time slots

我有以下数据文件。

[{'timeSlot': '10:45 AM','key': 'value', 'key': 'value', 'key': 'value'},{'timeSlot': '10:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '09:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '09:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '10:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '09:45 AM','key': 'value', 'key': 'value', 'key': 'value'}]

我想按时间段分组得到结果。执行此操作的最佳方法是什么?

期望的输出类似于:

{'09:45 AM' : [{'timeSlot': '09:45 AM', 'key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '09:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '09:45 AM','key': 'value', 'key': 'value', 'key': 'value'}], 
'10:45 AM' : [{'timeSlot': '10:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '10:45 AM','key': 'value', 'key': 'value', 'key': 'value'}, {'timeSlot': '10:45 AM','key': 'value', 'key': 'value', 'key': 'value'}]}

groupby function in itertools就是你想要的:

from itertools import groupby

# assuming `data` is your datafile contents
keyfunc = lambda d: d['timeSlot']
dict((k, list(v)) for k, v in groupby((sorted(data, key=keyfunc)), keyfunc))

调用 sorted 是必要的,否则 groupby returns 每次密钥更改时都会生成一个新组。首先对其进行排序类似于在 bash 终端上调用 sort | uniq

此外,请注意 groupby returns 默认情况下是一个带有键和子迭代器的可迭代对象,因此我插入了 dictlist 调用以将其展平进入你想要的结果结构。如果您只需要遍历组,那么使用迭代器会更简洁、更高效。