如何从字典列表中筛选出最新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
相关产品推荐
相关产品推荐

