如何获取字典列表中各ent对应最大id值的字典条目?
解决方法
这里提供两种实用的Python实现方式:
方法一:遍历维护字典(推荐,无需预排序)
直接遍历原列表,用一个字典记录每个ent对应的最大id字典,过程中实时更新:
list1 = [{'id': 1, 'ent': 123}, {'id': 2, 'ent': 123}, {'id': 3, 'ent': 456}, {'id': 4, 'ent': 456}, {'id': 5, 'ent': 123}] max_ent_dict = {} for item in list1: ent_val = item['ent'] # 如果当前ent还没记录,或者当前item的id更大,就更新 if ent_val not in max_ent_dict or item['id'] > max_ent_dict[ent_val]['id']: max_ent_dict[ent_val] = item # 把字典的值转成列表就是结果 result = list(max_ent_dict.values()) print(result)
运行后输出:
[{'id': 5, 'ent': 123}, {'id': 4, 'ent': 456}]
(注:Python 3.7+字典会保留插入顺序,结果顺序可能和预期略有不同,但内容完全正确;如果需要严格匹配预期顺序,可对结果再按ent或id排序)
方法二:使用itertools.groupby(需先排序)
先按ent字段对原列表排序,再用groupby分组,最后在每个组里筛选出id最大的字典:
from itertools import groupby list1 = [{'id': 1, 'ent': 123}, {'id': 2, 'ent': 123}, {'id': 3, 'ent': 456}, {'id': 4, 'ent': 456}, {'id': 5, 'ent': 123}] # 先按ent排序,保证groupby能正确分组 sorted_list = sorted(list1, key=lambda x: x['ent']) result = [] for ent_val, group in groupby(sorted_list, key=lambda x: x['ent']): # 从分组里找出id最大的字典 max_item = max(group, key=lambda x: x['id']) result.append(max_item) print(result)
运行后输出和预期一致:
[{'id': 5, 'ent': 123}, {'id': 4, 'ent': 456}]
内容的提问来源于stack exchange,提问作者Lokesh Rathi
相关产品推荐
相关产品推荐

