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

Django/Python:按时间段分组结果,python,django,time,Python,Django,Time,我有一个下面的数据文件 [{'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

我有一个下面的数据文件

[{'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'}]}
中的函数是您想要的:

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


另外,请注意,默认情况下,
groupby
返回一个带有键和子迭代器的iterable,因此我插入了
dict
list
调用,以将其展平到所需的结果结构中。如果您只需要对组进行迭代,那么只使用迭代器会更干净、更高效。

Thanx用于回答。太棒了!我可以通过运行它看到它的工作原理。这正是我想要的。但我也希望按时间段进行分组排序。如果您希望按时间段对结果进行排序,那么标准字典不是正确的表示形式,因为它是无序的。如果将
collections
模块中的
OrderedDict
替换为
dict
调用,将得到您想要的。