基于日期最大值条件筛选嵌套列表,保留同第四元素的最新条目
嘿,这个需求很常见,用Python处理起来其实挺简单的,我给你分享个高效的实现方式:
核心思路
我们可以用字典分组的方法:把每个子列表的第四个元素作为分组的键,然后在每个分组里只保留日期最新的那条记录。因为字典的键是唯一的,刚好能帮我们自动去重分组,再配合日期比较就能筛选出最新项。
具体代码实现
# 你的原始数据 a = [ ['2012-05-11','yes','44','426.24'], ['2013-03-22','no','12','426.24'], ['2018-08-13','yes','88','426.24'], ['2017-05-11','yes','404','450.24'] ] # 初始化字典,用来存每个分组的最新记录 latest_dict = {} for record in a: group_key = record[3] # 用第四元素当分组键 current_date = record[0] # 两种情况更新字典:要么分组还没记录,要么当前日期比已存的更新 if group_key not in latest_dict or current_date > latest_dict[group_key][0]: latest_dict[group_key] = record # 把字典里的值转成列表,就是最终结果 result = list(latest_dict.values()) print(result)
代码细节解释
- 为什么能用字符串日期直接比较?因为你的日期是
YYYY-MM-DD格式的,这种格式的字符串在Python里可以直接按字典序比较,结果和实际日期的先后完全一致,省了转日期对象的麻烦~ - 字典的键自动帮我们完成了分组,每个键对应一个唯一的第四元素值,不会重复。
- 遍历过程中会不断更新每个分组的最新记录,最后把所有值提取出来就是我们要的结果。
运行这段代码后,输出的结果就是你期望的:
[['2018-08-13', 'yes', '88', '426.24'], ['2017-05-11', 'yes', '404', '450.24']]
如果后续你的日期格式变了(比如不是YYYY-MM-DD),那可以用datetime模块把字符串转成datetime对象再比较,不过这个场景下直接用字符串比较就足够啦。
内容的提问来源于stack exchange,提问作者yasseros
相关产品推荐
相关产品推荐

