Как проверить, присутствует ли определенная дата в словаре, и если нет, вернуть ближайшую доступную дату? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть словарь со многими отсортированными датами.Как я могу написать цикл в Python, который проверяет, находится ли определенная дата в словаре, а если нет, возвращает ближайшую доступную дату?Я хочу, чтобы это работало так, что если после вычитания одного дня до даты он снова проверяет, существует ли он в словаре, а если нет, то снова вычитает, пока не найдет существующую дату.

Заранее спасибо

from datetime import timedelta

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

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я сделал рекурсивную функцию для решения вашей проблемы:

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)))
0 голосов
/ 05 апреля 2019

То, что вы ищете, возможно, является циклом 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...