Django / Python:按时隙分组结果

时间:2015-02-01 18:22:53

标签: 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 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'}]}

1 个答案:

答案 0 :(得分:1)

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

另外,请注意groupby默认返回带有键和子迭代器的iterable,因此我插入的dictlist调用将其展平为您想要的结果结构。如果你只需要迭代组,那么只使用迭代器就更清晰,更有效。