首页 > 解决方案 > 根据某些条件过滤字典列表

问题描述

我有以下列表

[
<class 'supapi.classes.Offer'>: {'currency': 'RUR', 'date_from': '2020-02-18', 'rub_value': '62.00'}, 
<class 'supapi.classes.Offer'>: {'currency': 'RUR', 'date_from': '2020-02-16', 'rub_value': '50.00'}, 
<class 'supapi.classes.Offer'>: {'currency': 'RUR', 'date_from': '2020-02-30', 'rub_value': '0.00'}, 
<class 'supapi.classes.Offer'>: {'currency': 'RUR', 'date_from': '2019-11-25', 'rub_value': '5.00'}
]

我想根据最后日期条件而不是未来日期过滤该列表。例如,过滤后我只想得到,[<class 'supapi.classes.Offer'>: {'currency': 'RUR', 'date_from': '2020-02-18', 'rub_value': '62.00'}]因为它是最后一个当前日期而不是未来日期

我发现我可以使用 datetime.datetime.strptime(date_string, '%Y-%m-%d') 比较日期

标签: pythonpython-3.x

解决方案


如果您只想获取date_from设置为当前日期的对象,您可以创建一个具有相同格式的字符串并进行比较。

this_day = datetime.date.today().strftime('%Y-%m-%d')
result = filter(lambda e: e.date_from == this_day, offers_list)

更新的答案

如果您想要最新的对象,date_from您可以首先过滤出未来的值filter并使用它max来找到正确的值。

from datetime import datetime, date
result = filter(lambda e: datetime.strptime(e.date_from, '%Y-%m-%d').date() <= date.today() , offers_list)
value = max(result, key=lambda e: datetime.strptime(e.date_from, '%Y-%m-%d'))

推荐阅读