python - 根据某些条件过滤字典列表
问题描述
我有以下列表
[
<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') 比较日期
解决方案
如果您只想获取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'))
推荐阅读
- ruby-on-rails - Hyperstack 中的“未初始化常量”错误:找不到模型和组件
- tableau-api - 如何按类别排名 - Tableau
- android - Kotlin android微调器问题
- php - 在自定义博客页面模板中添加分页
- java - QuerySyntaxException:期待关闭,找到“。”
- excel - PictureLookup 宏停止正确定位肖像图片
- git - 我可以在我的项目用户可以访问的子模块上创建一个分支,而无需推送到子模块吗?
- mongodb - Mongodb - 如何将字段从一对一关系添加到嵌套对象
- mysql - UNION 查询失败并显示“双重查询具有不兼容的类型:Union、varchar”
- c++ - gif 闪烁