我有一个以下数据文件。
[{'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'}]}
答案 0 :(得分:1)
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
调用将其展平为您想要的结果结构。如果你只需要迭代组,那么只使用迭代器就更清晰,更有效。