Python列表按日期分组

问题描述

用途itertools.groupby

>>> records = [(datetime.datetime(2013, 8, 8, 1, 20, 15), 2060), ....]
>>> import itertools
>>> [(dt, max(v for d, v in grp)) for dt, grp in itertools.groupby(records, key=lambda x: x[0].date())]
[(datetime.date(2013, 8, 8), 2060),
 (datetime.date(2013, 8, 9), 2055),
 (datetime.date(2013, 8, 10), 2050),
 ...
]

:假定记录已排序。如果不是,则应首先按日期对它们进行排序。

解决方法

说我有一个看起来像这样的清单:

[(datetime.datetime(2013,8,1,20,15),2060),(datetime.datetime(2013,9,6,14),2055),21,1),2050),10,5,49),19,51),11,2,4,53),12,29,45),44,13),13,34,47,29),14,30,39),33,15,41,54,16,57),1950),43,11),17,27,4),42,30),18,26,26),23),23,44),25),12),22,45,21),33),51,27),36),24,3),53,25,24),40),28,43),19),49,9),31,39,2),38,16),36,3,1900)]

显然,您可以看到这是一个元组列表,每个元组中的第一个元素是一个时间戳。已采用以下格式生成:

datetime.strptime(record[0],timeFormat)

第二个要素是监控值。但是,每天可能会有多个记录。例如,datetime.datetime(2013,8,9
..)上有两条记录,它们有两个不同的值2055和2050。我想要的实际上是每天的最大值。所以在这种情况下。2055年将是(2013,8,9)的唯一记录。

我想知道Python中是否有方便的方法可以做到这一点。类似于mysql的一些东西:

select 
    date(timestamp),max(value)
from table 
group by date(timestamp)

mysql语句只是为了展示这个想法,我当然想要一个python解决方案。