如何检查词典中是否存在某个日期,如果不存在,则返回最接近的可用日期?

时间:2019-04-04 21:44:30

标签: python loops datetime

我的词典中有很多排序日期。如何在Python中编写一个循环,以检查字典中是否有特定日期,如果没有,则返回可用的最接近日期?我希望它的工作方式是,如果在减去日期的一天之后,它再次检查字典中是否存在该日期,如果不存在,则再次减去,直到找到一个存在的日期。

预先感谢

from datetime import timedelta

def function(date):
    if date not in dictio:
        date -= timedelta(days=1)
    return date

2 个答案:

答案 0 :(得分:0)

您正在寻找的可能是一个while循环,尽管要小心,因为如果找不到日期,它将运行到无限。也许您想定义一个尝试限制,直到脚本放弃为止?

from datetime import timedelta, date

d1 = {
    date(2019, 4, 1): None
}

def function(date, dictio):
    while date not in dictio:
        date -= timedelta(days=1)

    return date


res_date = function(date.today(), d1)
print(res_date)

答案 1 :(得分:0)

我已经创建了一个递归函数来解决您的问题:

import datetime
def find_date(date, date_dict):
    if date not in date_dict.keys():
        return find_date(date-datetime.timedelta(days=1), date_dict)
    else:
        return date

我不知道您的词典的内容是什么,但以下示例应向您展示其工作原理:

import numpy as np

# creates a casual dates dictionary
months = np.random.randint(3,5,20)
days = np.random.randint(1,30,20)
dates = {
    datetime.date(2019,m,d): '{}_{:02}_{:02}'.format(2019,m,d) 
    for m,d in zip(months,days)}

# select the date to find
target_date = datetime.date(2019, np.random.randint(3,5), np.random.randint(1,30))

# print the result
print("The date I wanted: {}".format(target_date))
print("The date I got: {}".format(find_date(target_date, dates)))