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
调用,将得到您想要的。