I may not fully understand your problem, but you can get all the hours between two dates and summarize how many times each hour and day appears between two dates:
from datetime import datetime from dateutil import rrule,parser d={ 'Mon': [9, 23], 'Thu': [12, 13, 14], 'Tue': [11, 12, 14], 'Wed': [11, 12, 13, 14], 'Fri': [13], 'Sat': [], 'Sun': [], } st = datetime(2015, 7, 22, 17, 58, 54, 746784) ed = datetime(2015, 8, 30, 10, 22, 36, 363912) dates = list(rrule.rrule(rrule.HOURLY, dtstart=parser.parse(st.strftime("%Y-%m-%d %H:%M:%S")), until=parser.parse(ed.strftime("%Y-%m-%d %H:%M:%S")))) days = {"Mon":0,"Tue": 1,"Wed":2,"Thu": 3,"Fri":4,"Sat":5,"Sun":6} for k, val in d.items(): for v in val: print("day: {} hour: {}".format(k,v)) day = days[k] print(sum((v == dt.hour and dt.weekday() == day) for dt in dates))
Output:
day: Wed hour: 11 5 day: Wed hour: 12 5 day: Wed hour: 13 5 day: Wed hour: 14 5 day: Fri hour: 13 6 day: Tue hour: 11 5 day: Tue hour: 12 5 day: Tue hour: 14 5 day: Mon hour: 9 6 day: Mon hour: 23 5 day: Thu hour: 12 5 day: Thu hour: 13 5 day: Thu hour: 14 5
Not sure if you want to receive the amount for all the hours in each list or the total amount for each individual hour, but in any case you can save the output in a file.
counts = {'Thu':{}, 'Sun':{}, 'Fri':{}, 'Mon':{}, 'Tue':{}, 'Sat':{}, 'Wed':{}} for k, val in d.items(): for v in val: day = days[k] sm = sum((v == dt.hour and dt.weekday() == day) for dt in dates) counts[k][v] = sm from pprint import pprint as pp pp(counts)
Output:
{'Fri': {13: 6}, 'Mon': {9: 5, 23: 5}, 'Sat': {}, 'Sun': {}, 'Thu': {12: 6, 13: 6, 14: 6}, 'Tue': {11: 5, 12: 5, 14: 5}, 'Wed': {11: 5, 12: 5, 13: 5, 14: 5}}