Python 日期哈希表

Python Dates Hashtable

我正在尝试创建一个散列 table 以加快查找特定日期与假期日期之间差异的过程(我有一个包含 10 个假期日期的列表)。

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'] 

from datetime import datetime

holidaydate=[]

for i in range(10):
    holidaydate.append(datetime.strptime(holidays[i], '%Y-%m-%d'))


newdate=pd.to_datetime(df.YEAR*10000+df.MONTH*100+df.DAY_OF_MONTH,format='%Y-%m-%d')
#newdate contains all the 0.5 million of dates!

现在我想使用哈希 table 来计算 "newdate" 中的 50 万个日期中的每一个与最接近的假期之间的差异。我不想做同样的计算数百万次,这就是为什么我想为此使用散列table。

我尝试在 google 上搜索解决方案,但只找到了诸如:

keys = ['a', 'b', 'c']
values = [1, 2, 3]
hash = {k:v for k, v in zip(keys, values)}

这对我来说不起作用。

感谢您的帮助!

您需要先创建 table。像这样。

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.date 个对象而不是原始字符串。它有一个 built-in 函数,可以将 "yyyy-mm-dd" 字符串转换为 datetime.date。

这会为 2013 年 1 月 1 日到 2015 年 12 月 31 日之间的所有日期创建一个散列 table,然后仅用一个日期对其进行测试。然后,您将循环 50 万个日期并匹配该字典中的结果(键是 datetime.date 对象,但如果您愿意,您当然可以将其转换回字符串)。

无论如何,这应该会让您了解如何执行此操作。