Python多条件筛选字典列表最新记录:last_modified相同时按date排序
实现多字段优先级排序获取最新记录
场景代码
data = [ {"name": "name1", "date": "1997-07-16 19:20:00+01:00" , 'last_modified':"1997-07-16 19:20:00+01:00"}, {"name": "name3", "date": "2006-07-16 19:20:00+01:00" , 'last_modified':"1997-07-16 19:20:00+01:00"}, {"name": "name2", "date": "1992-07-16 19:20:00+01:00", 'last_modified':"1997-07-16 19:20:00+01:00"}]
原代码仅按last_modified字段降序排序:
sorted_files = sorted(data, key=lambda d: d.get('last_modified', {}), reverse=True)
问题需求
当多个记录的last_modified字段值相同时,需要进一步对比date字段,按date降序筛选出最新记录,如何用一行代码实现?
解决方案
利用Python排序时对元组的按元素顺序依次比较特性,将排序key设置为包含last_modified和date的元组即可:
sorted_files = sorted(data, key=lambda d: (d.get('last_modified'), d.get('date')), reverse=True)
原理说明
- 排序时会先比较元组的第一个元素
last_modified,值大的排在前面(因为reverse=True); - 当
last_modified相同时,自动比较第二个元素date,同样按降序排列,从而实现"先按last_modified,再按date"的优先级排序逻辑。
内容的提问来源于stack exchange,提问作者newbiee
相关产品推荐
相关产品推荐

