У меня есть словарь с примерно 15k записями, который отформатирован так:
sample = {0: {'Schedule': ['2017-05-11', '2019-04-30', '2018-10-13', '2019-05-31', '', '']},
1: {'Schedule': ['2017-05-09', '2019-05-31', '', '', '2018-10-13', '2019-05-31']},
2: {'Schedule': ['2017-05-02', '2020-02-29', '', '', '2018-10-12', '2020-02-29']}}
Теперь мне нужно сравнить 1-ю, 3-ю и 5-ю даты в 'Schedule'
с двумя объектами datetime и посмотреть, падает лив пределах диапазона.Я делаю ниже, но результат довольно медленный и занимает около 20 секунд.Кто-нибудь может предложить более эффективный способ поиска?
Полный пример кода:
from datetime import datetime
sample = {0: {'Schedule': ['2017-05-11', '2019-04-30', '2018-10-13', '2019-05-31', '', '']},
1: {'Schedule': ['2017-05-09', '2019-05-31', '', '', '2018-10-13', '2019-05-31']},
2: {'Schedule': ['2017-05-02', '2020-02-29', '', '', '2018-10-12', '2020-02-29']}}
start_date = datetime.date(datetime.strptime("2018-10-12","%Y-%m-%d"))
end_date = datetime.date(datetime.strptime("2018-10-16","%Y-%m-%d"))
for k,v in sample.items():
earliest = [dt for dt in [v["Schedule"][0],v["Schedule"][2],v["Schedule"][4]] if dt] #only need to check these 3 starting dates
def check_earliest(_list): #check if any date meets search criteria
for i in _list:
if start_date <= datetime.date(datetime.strptime(i, "%Y-%m-%d")) <= end_date:
return True
if check_earliest(earliest):
print ("Do something here...")