如何基于索引6的最大值去除Python元组列表中的重复值
Python元组列表按规则去重实现
需求说明
给定如下元组列表,需对重复条目去重,重复条目仅保留索引6位置取值最大的条目:
[('John', 53, "Yes", "No", "No", "No", 62.4, "Yes", "Yes"), ('Amy', 46, "No", "No", "No", "No", 52.2, "No", "No"), ('John', 53, "Yes", "No", "No", "No", 65, "No", "No")]
预期输出:
[('Amy', 46, "No", "No", "No", "No", 52.2, "No", "No"), ('John', 53, "Yes", "No", "No", "No", 65, "Yes", "Yes")]
实现思路
- 首先确定重复判定规则:示例中两条
John的姓名、年龄字段完全一致,判定为同一组重复条目,我们以元组前2位(姓名+年龄)作为分组键 - 用字典临时存储分组数据,每组遍历过程中仅保留索引6位置数值最大的元组
- 最终将字典值转为列表即为去重结果
实现代码
original_data = [ ('John', 53, "Yes", "No", "No", "No", 62.4, "Yes", "Yes"), ('Amy', 46, "No", "No", "No", "No", 52.2, "No", "No"), ('John', 53, "Yes", "No", "No", "No", 65, "No", "No") ] temp_dict = {} for item in original_data: # 分组键可根据实际重复判定规则调整切片范围,示例以姓名+年龄作为重复判定依据 group_key = item[:2] if group_key not in temp_dict: temp_dict[group_key] = item else: # 比较索引6的数值,保留数值更大的条目 if item[6] > temp_dict[group_key][6]: # 如果需要保留原最大条目的后两位字段,可替换为下面注释的代码 # temp_dict[group_key] = temp_dict[group_key][:6] + (item[6],) + temp_dict[group_key][7:] temp_dict[group_key] = item result = list(temp_dict.values()) print(result)
注:如果你给出的预期输出中,
John对应条目索引7、8位保留了旧值,只需打开代码中的注释行替换原有赋值逻辑即可匹配预期输出。
内容的提问来源于stack exchange,提问作者asd-qwert
相关产品推荐
相关产品推荐

