假设我有一个对象列表。其中每一个都有一个表示日期的字符串(可由 dateutil 解析)。我怎样才能将这些分组到列表列表中,其中每个子列表包含连续的(5 分钟内)对象?例如:
o1.time = "2016-03-01 23:25:00-08:00"
o2.time = "2016-03-01 23:30:00-08:00"
o3.time = "2016-03-01 23:35:00-08:00"
o4.time = "2016-03-02 12:35:00-08:00"
list1 = [o1, o2, o3, o4]
list2 = group_by_time(list1)
此时 list2 将是
[[o1,o2,o3],[o4]]
似乎应该有一个使用 lambdas 或 itertools 以及 dateutil 的 python 解决方案,但我的谷歌学校让我失望。
谢谢!
请您参考如下方法:
看看groupby来自 itertools 的函数。它获取对象列表并根据关键函数对它们进行分组。您的代码可能如下所示
from dateutil.parser import parse
from itertools import groupby
def rounded_date(item):
d = parse(item.time)
# round date
return d
grouped_items = groupby(items, keyfunc=rounded_date)
查看此问题以了解如何舍入日期时间:How to round the minute of a datetime object python
