You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字典列表中筛选出最新start_date且最大perc的字典?

先筛选最新日期再获取最大perc值的字典实现方案

给定如下manager列表:

manager1={"id":"1","start_date":"2019-08-01","perc":20}
manager2={"id":"2","start_date":"2021-08-01","perc":20}
manager3={"id":"3","start_date":"2019-08-01","perc":80}
manager4={"id":"4","start_date":"2021-08-01","perc":80}
managers=[manager1,manager2,manager3,manager4]

需求是先筛选出start_date最新的字典,再从中取perc值最大的字典。直接用max(managers, key=lambda x:x['perc'])会得到manager3,不符合需求,这里提供两种可行方案:

方案一:分步筛选

先定位最新日期,再过滤出对应数据,最后取最大perc值:

# 获取最新的start_date(ISO格式字符串可直接比较大小)
latest_start_date = max(m['start_date'] for m in managers)
# 筛选出所有最新日期的manager
filtered_managers = [m for m in managers if m['start_date'] == latest_start_date]
# 在筛选结果中取perc最大的字典
target_manager = max(filtered_managers, key=lambda x: x['perc'])
print(target_manager)  # 输出: {'id': '4', 'start_date': '2021-08-01', 'perc': 80}

方案二:单步max排序

利用元组的比较特性,将排序key设为(start_date, perc),因为ISO格式的日期字符串可直接比较大小,max会优先按start_date降序,再按perc降序:

target_manager = max(managers, key=lambda x: (x['start_date'], x['perc']))
print(target_manager)  # 输出: {'id': '4', 'start_date': '2021-08-01', 'perc': 80}

注:如果start_date不是ISO格式(比如08-01-2019),需要先将其转换为datetime对象再比较,避免字符串比较出错。

内容的提问来源于stack exchange,提问作者abinitio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:48:14