从日期时间列表中提取日,小时和秒

时间:2016-05-15 09:22:25

标签: python datetime itertools

我有一个很长的datetime按时间顺序列出的列表(如果你愿意,可以单调增加)。想象一下这样的事情:

import datetime
dates=[datetime.datetime.fromtimestamp(xx) for xx in xrange(huge_number)]

与我的真实列表的区别在于时间步长并不总是恒定的,并且通常在秒,小时或天之间存在间隙。

我想要做的是让用户选择(通过PyQt4 GUI)一个精确的日期时间,以及我猜测要做的事情:

  1. 获取datetimes_list
  2. 中包含的所有不同日期
  3. 每天,建立一个包含与当天相对应的所有不同时间的列表
  4. 每小时,获取与此时间相对应的完整时刻列表
  5. 当然,我可以使用一些for / if循环执行此操作,但我想知道是否有一种有效且紧凑的方法来执行此操作,可能使用itertoolsgroupby迭代器。但如果我真的对itertools感到不舒服,那么如果有人有一个想法会很棒的话!

1 个答案:

答案 0 :(得分:1)

为什么不使用字典或OrderedDict:

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)访问时间