Python 从日期时间列表中提取天、小时和秒
我有一个很长的Python 从日期时间列表中提取天、小时和秒,python,datetime,itertools,Python,Datetime,Itertools,我有一个很长的datetimes列表,按时间顺序排序(如果您愿意,可以单调递增)。想象一下: import datetime dates=[datetime.datetime.fromtimestamp(xx) for xx in xrange(huge_number)] 与我的真实列表不同的是,时间步长并不总是恒定的,通常在秒、小时或天之间存在间隔 我想做的是让用户(通过PyQt4 GUI)选择一个精确的日期时间,我猜是这样做的: 获取datetimes\u列表中包含的所有不同日期 对于每一
datetime
s列表,按时间顺序排序(如果您愿意,可以单调递增)。想象一下:
import datetime
dates=[datetime.datetime.fromtimestamp(xx) for xx in xrange(huge_number)]
与我的真实列表不同的是,时间步长并不总是恒定的,通常在秒、小时或天之间存在间隔
我想做的是让用户(通过PyQt4 GUI)选择一个精确的日期时间,我猜是这样做的:
datetimes\u列表中包含的所有不同日期
当然,我可以用一些For/if循环来实现这一点,但我想知道是否有一种高效而紧凑的方法来实现这一点,可以使用
itertools
和groupby
迭代器。但是如果我真的不喜欢使用itertools
,那么如果有人有这样的想法那就太好了 为什么不使用字典或订购的信息:
import collections
d=collections.OrderedDict()
for e in dates:
d.setdefault(e.strftime('%Y%m%d'),collections.OrderedDict()).setdefault(e.strftime('%H'), []).append(e.strftime('%H%M%S'))
或采用不太紧凑但更具可读性的公式:
import collections
d=collections.OrderedDict()
for e in dates:
day, hour, full_time=e.strftime('%Y%m%d'), e.strftime('%H'), e.strftime('%H%M%S')
d.setdefault(day,collections.OrderedDict()).setdefault(hour, []).append(full_time)
它将导致任何日期选择/任何小时选择的O(1)访问时间您可以使用在排序列表中查找特定的日期时间。您应该(可能)动态构建2和3个列表,以响应用户从上一个列表中选择的条目。注意:本地时间不一定是单调的(例如,由于DST转换),因此在您的情况下,
fromtimestamp()
的结果不一定会增加(取决于您的本地时区)非常感谢你的回答。这对我来说太好了!酷。如果你把这个答案标记为ok,那就太好了。