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 默认情况下是一个带有键和子迭代器的可迭代对象,因此我插入了 dict
和 list
调用以将其展平进入你想要的结果结构。如果您只需要遍历组,那么使用迭代器会更简洁、更高效。
我有以下数据文件。
[{'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 默认情况下是一个带有键和子迭代器的可迭代对象,因此我插入了 dict
和 list
调用以将其展平进入你想要的结果结构。如果您只需要遍历组,那么使用迭代器会更简洁、更高效。