您需要先创建表。像这样。
import datetime
holidays =['2014-01-01', '2014-01-20', '2014-02-17', '2014-05-26',
'2014-07-04', '2014-09-01', '2014-10-13', '2013-11-11',
'2013-11-28', '2013-12-25']
hdates = []
def return_date(txt):
_t = txt.split("-")
return datetime.date(int(_t[0]), int(_t[1]), int(_t[2]))
def find_closest(d):
_d = min(hdates, key=lambda x:abs(x-d))
_diff = abs(_d - d).days
return _d, _diff
# Convert holidays to datetime.date
for h in holidays:
hdates.append(return_date(h))
# Build the "hash" table
hash_table = {}
i_date = datetime.date(2013, 1, 1)
while i_date < datetime.date(2016,1,1):
cd, cdiff = find_closest(i_date)
hash_table[i_date] = {"date": cd, "difference": cdiff}
i_date = i_date + datetime.timedelta(days=1)
print hash_table[datetime.date(2014,10,15)]
这适用于datetime。日期对象,而不是原始字符串。它有一个内置函数,可以将“yyyy-mm-dd”字符串转换为datetime。尽管是日期。
这将为2013年1月1日至2015年12月31日之间的所有日期创建一个哈希表,然后仅使用一个日期进行测试。然后,您将循环您的50万个日期并匹配此字典中的结果(键是datetime.date对象,但如果您愿意,您当然可以将其转换回字符串)。
无论如何,这应该给你一个方法。