Python:如何在嵌套列表中去重并保留第二个元素值最大的项?
处理嵌套列表重复项,保留最大分数项
给定一个嵌套列表,子列表的第一个元素存在重复,需要去除重复项,仅保留每个第一个元素对应的第二个元素(分数)最大的项。
示例输入
list_dup = [["Apple", 24], ["Apple", 23], ["Sun", 15], ["Apple", 2], ["Sun", 1], ["Blue", 15] ]
期望输出
[["Apple", 24], ["Sun", 15], ["Blue", 15] ]
解决方案
利用字典的键唯一性来实现,遍历列表时记录每个元素对应的最高分数,最后转换回嵌套列表格式即可:
基础实现(Python 3.7+)
max_score_dict = {} for key, score in list_dup: if key not in max_score_dict or score > max_score_dict[key]: max_score_dict[key] = score # 转换为目标格式 result = [[k, v] for k, v in max_score_dict.items()]
兼容旧版本Python(3.6及更早)
如果需要保持元素的插入顺序且兼容Python 3.6及更早版本,可以使用OrderedDict:
from collections import OrderedDict max_score_dict = OrderedDict() for key, score in list_dup: if key not in max_score_dict or score > max_score_dict[key]: max_score_dict[key] = score result = [[k, v] for k, v in max_score_dict.items()]
说明
- 字典
max_score_dict用来存储每个元素名对应的最高分数,遍历过程中会自动跳过分数更低的重复项。 - Python 3.7及以上版本的字典默认保留插入顺序,因此最终结果的元素顺序会和原列表中首次出现的顺序一致。
- 列表推导式将字典的键值对转换回需求的嵌套列表结构。
内容的提问来源于stack exchange,提问作者Elisa Nu
相关产品推荐
相关产品推荐

