
本文介绍如何将包含姓名和数字的嵌套列表按姓名去重,并将相同姓名对应的数字累加,最终以字典或列表形式返回聚合结果,适用于数千条数据的快速处理。
在实际数据处理中,常遇到类似 [['Smith, Karen', '10'], ['Miller, Michael', '20'], ['Smith, Karen', '30']] 这样的结构:外层是列表,内层是 [name, str_number] 形式的二元子列表。目标是按姓名(即每个子列表的首元素)分组,将对应数字(需转为整数)求和,最终得到唯一姓名与总和的映射。
最简洁、高效且符合 Python 习惯的做法是使用字典作为聚合容器——因为字典天然支持 O(1) 的键查找与更新,避免了嵌套循环带来的 O(n²) 时间复杂度,对约 4000 条数据尤其友好。
以下是推荐实现:
mylist = [['Smith, Karen', '10'], ['Miller, Michael', '20'], ['Smith, Karen', '30'], ['Taylor, Peter', '95']]
# 步骤1:用字典累计求和(推荐)
result_dict = {}
for name, num_str in mylist:
result_dict[name] = result_dict.get(name, 0) + int(num_str)
print(result_dict)
# 输出: {'Smith, Karen': 40, 'Miller, Michael': 20, 'Taylor, Peter': 95}
如需保持原始输出格式(即返回嵌套列表),可进一步转换:
Python 环境工具专业版功能概述Python 环境工具专业版是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。执行完成后建议检查结果是否符合预期,并保留必要记录。使用与执行同时注意输入完整性、执行条件和输出可用性。从功能定位来看,该技能
# 步骤2:转回 [['name', 'sum_str']] 格式(可选) result_list = [[name, str(total)] for name, total in result_dict.items()] print(result_list) # 输出: [['Smith, Karen', '40'], ['Miller, Michael', '20'], ['Taylor, Peter', '95']]
✅ 关键优势说明:
- dict.get(key, default) 安全获取当前值,避免 KeyError;
- 单次遍历(O(n) 时间复杂度),内存占用低;
- 自动去重 + 累加,逻辑清晰无冗余;
- 支持任意数量重复项,扩展性强。
⚠️ 注意事项:
- 确保 num_str 可安全转为整数,生产环境建议添加异常处理(如 try/except ValueError);
- 若需保持原始顺序(如首次出现姓名的顺序),可改用 collections.OrderedDict(Python
- 不推荐使用 list.index() 或双重 for 循环查找重复项——在 4k 数据量下性能显著下降。
综上,以字典为中间聚合结构,是解决此类“按键合并累加”问题最Pythonic、最高效的方式。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










