Skip to main content
 首页 » 编程设计

python之Django / python : group results by time slots

2025年05月04日24pander-it

我有以下数据文件。

[{'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在 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 都会返回一个新组。首先对其进行排序类似于调用 sort | bash 终端上的 uniq。

此外,请注意 groupby 默认返回一个带有键和子迭代器的可迭代对象,因此我插入了 dict 和 list 调用将其展平为您想要的结果结构。如果您只需要遍历组,使用迭代器会更简洁、更高效。