Python列表去重保留每组最高值,如何处理含短横线的特殊条目?
解决思路
我们以每个子列表的前两个元素作为分组唯一标识,遍历所有条目时维护每个分组里最后一列数值最大的条目:
- 最后一列是
-的条目权重设为低于所有合法数值,仅当对应分组无其他带数值的条目时保留 - 字典存储分组最优条目,天然保留原列表的分组出现顺序,符合输出要求
实现代码
# 待处理列表 list_no_ok = [['A', 'a', 'Finished', '30 September 2020 12:46 PM', '8.08'], ['B', 'b', 'Finished', '30 September 2020 2:52 PM', '3.46'], ['J', 'j', 'In progress', '-', '-'], ['K', 'k', 'Finished', '1 October 2020 11:32 AM', '10.00'], ['M', 'm', 'Finished', '1 October 2020 2:12 PM', '6.15'], ['M', 'm', 'Finished', '1 October 2020 2:20 PM', '9.10'], ['N', 'n', 'Finished', '1 October 2020 3:38 PM', '7.69'], ['O', 'o', 'Finished', '1 October 2020 5:06 PM', '4.87'], ['O', 'o', 'Finished', '1 October 2020 5:37 PM', '5.90']] group_best = {} for row in list_no_ok: group_key = (row[0], row[1]) last_val = row[-1] # 计算当前行权重 current_weight = -1 if last_val == '-' else float(last_val) # 分组不存在则直接存入,存在则比较权重保留更大的 if group_key not in group_best: group_best[group_key] = (row, current_weight) else: if current_weight > group_best[group_key][1]: group_best[group_key] = (row, current_weight) # 提取结果 list_ok = [item[0] for item in group_best.values()]
输出验证
运行上述代码得到的list_ok和你期望的结果完全一致,包含带-的条目,且所有重复分组均保留了最后一列数值最大的条目。
内容的提问来源于stack exchange,提问作者bendour
相关产品推荐
相关产品推荐

