在数组上循环时的最近日期。python

2024-04-27 03:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个日期数组,如下所示:

array = [{'date': '09-Jul-2018'}, 
         {'date': '09-Aug-2018'}, 
         {'date': '09-Sep-2018'}]

我的日期如下17-Aug-2018。你知道吗

有谁能建议最好的方法来检查最近的日期,总是在过去?你知道吗

我试过下列方法,但没有用。你知道吗

closest_date

 for i in range(len(array)):
    if(date > array[i].date and date < array[i + 1].date):
        closest_date = array[i]

Tags: and方法infordatelenifrange
3条回答

这是一种方法。你知道吗

例如:

import datetime

array = [{'date': '09-Jul-2018'}, 
         {'date': '09-Aug-2018'}, 
         {'date': '09-Sep-2018'}]

to_check = "17-Aug-2018"
to_check = datetime.datetime.strptime(to_check, "%d-%b-%Y")

closest_dates = []
val = 0
for date in array:
    date_val = datetime.datetime.strptime(date["date"], "%d-%b-%Y")
    if date_val <= to_check:
        closest_dates.append({(to_check - date_val).days: date["date"]})
print(min(closest_dates, key=lambda x: x.items()[0]))

输出:

{8: '09-Aug-2018'}

采用另一种方法:

from datetime import datetime

convert = lambda e: datetime.strptime(e, '%d-%b-%Y')

array = [{'date': '09-Jul-2018'}, 
         {'date': '09-Aug-2018'}, 
         {'date': '09-Sep-2018'}]

ref = convert("17-Aug-2018")

transform = ((convert(elem['date']), elem['date']) for elem in array)
_, closest_date = max((elem for elem in transform if (elem[0] - ref).days < 0), key = lambda e: e[0])
print(closest_date)

输出为

09-Aug-2018

希望这有帮助。你知道吗

我的方法首先从dict列表中创建一个datetime对象列表,然后在与输入日期进行比较时对日期进行简单排序。你知道吗

input_dt = datetime.strptime('17-Aug-2018', '%d-%b-%Y')
sorted(
    map(lambda date: datetime.strptime(date['date'], '%d-%b-%Y'), array),
    key=lambda dt: (input_dt - dt).total_seconds() if dt < input_dt else float("inf"),
)[0].strftime('%d-%b-%Y')

相关问题 更多 >