在数组上循环时的最近日期。python
如果我有如下日期数组:在数组上循环时的最近日期。python,python,Python,如果我有如下日期数组: array = [{'date': '09-Jul-2018'}, {'date': '09-Aug-2018'}, {'date': '09-Sep-2018'}] 我的日期如下2018年8月17日 有谁能建议最好的方法来检查最近的日期,总是在过去 我试过以下方法,但没有效果 closest_date for i in range(len(array)): if(date > array[i].date and
array = [{'date': '09-Jul-2018'},
{'date': '09-Aug-2018'},
{'date': '09-Sep-2018'}]
我的日期如下2018年8月17日
有谁能建议最好的方法来检查最近的日期,总是在过去
我试过以下方法,但没有效果
closest_date
for i in range(len(array)):
if(date > array[i].date and date < array[i + 1].date):
closest_date = array[i]
最近日期
对于范围内的i(len(数组)):
如果(日期>数组[i]。日期和日期<数组[i+1]。日期):
最近的_日期=数组[i]
如果词典中的日期是时间戳,那么有一种方法:
from datetime import date
closest_date = min([x['date'] for x in array])
date = date(2018, 8, 17)
for element in array:
current_date = element['date']
if current_date < date and current_date>closest_date:
closest_date = current_date
# Output : datetime.date(2018, 8, 9)
这是一种方法
Ex:
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'}
我建议您在NumPy中使用始终矢量化的操作。它总是快得多:D.我会这样做:
import numpy as np
import datetime
dates = np.array(list(map(lambda d: datetime.datetime.strptime(d["date"], "%d-%b-%Y"), array)))
differences = dates - datetime.datetime.strptime("17-Aug-2018", "%d-%b-%Y")
differences = np.vectorize(lambda d: d.days)(differences)
differences[differences >= 0] = -9e9
most_recent_date = dates[np.argmax(differences)]
我的方法首先从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')
input\u dt=datetime.strtime('2018年8月17日','%d-%b-%Y')
分类(
映射(lambda date:datetime.strtime(date['date'],'%d-%b-%Y'),数组),
key=lambda dt:(input_dt-dt).total_seconds()如果dt
遵循另一种方法:
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)
希望这有帮助。您好,我想知道您的Python代码在哪里。这将有帮助:good shout@N.Arunoprayoch更新了问题,请再次检查您的答案,它给了我一个错误
名称“x”未定义
@complexiddephenomenon my bad,我已经修复了输入错误。请再试一次,因为有一个错误TypeError:“dict\u items”对象不支持索引py3-->print(min(最近的\u日期,key=lambda x:list(x.items())[0]))
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