我有一个很长的日期时间
列表,按时间顺序排序(如果您愿意,可以单调递增)。想象一下这样的事情:
import datetime
dates=[datetime.datetime.fromtimestamp(xx) for xx in xrange(huge_number)]
与我的真实列表的区别在于,时间步长并不总是恒定的,并且秒、小时或天之间通常存在间隙。
我想要做的是让用户选择(通过 PyQt4 GUI)精确的日期时间,以及我猜测要执行的操作:
- 获取
datetimes_list
中包含的所有不同日期 - 针对每一天,建立一个列表,其中包含与这一天相对应的所有不同时间
- 对于每个小时,获取该小时对应的时刻的完整列表
当然,我可以使用一些 for/if 循环来做到这一点,但我想知道是否有一种高效且紧凑的方法来做到这一点,也许使用 itertools
和 groupby
迭代器。但如果我真的对 itertools
感到不舒服,那么如果有人有一个想法那就太好了!
最佳答案
为什么不使用字典或 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)
关于python - 从日期时间列表中提取天、小时和秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236561/