我有一个很长的datetime
按时间顺序列出的列表(如果你愿意,可以单调增加)。想象一下这样的事情:
import datetime
dates=[datetime.datetime.fromtimestamp(xx) for xx in xrange(huge_number)]
与我的真实列表的区别在于时间步长并不总是恒定的,并且通常在秒,小时或天之间存在间隙。
我想要做的是让用户选择(通过PyQt4 GUI)一个精确的日期时间,以及我猜测要做的事情:
datetimes_list
当然,我可以使用一些for / if循环执行此操作,但我想知道是否有一种有效且紧凑的方法来执行此操作,可能使用itertools
和groupby
迭代器。但如果我真的对itertools
感到不舒服,那么如果有人有一个想法会很棒的话!
答案 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)访问时间