
本文介绍使用字典对含重复姓名的二维列表进行高效聚合的方法,通过键值映射实现姓名去重与数值累加,时间复杂度为 o(n),适用于数千条记录的场景。
在处理类似 [['Smith, Karen', '10'], ['Miller, Michael', '20'], ...] 这样的结构化数据时,核心诉求是:按姓名(字符串)分组,将对应的所有数值(字符串形式)转换为整数后求和。直接在列表中遍历查找重复项效率低(O(n²)),而 Python 字典天然支持 O(1) 平均查找与更新,是最优解。
推荐做法是构建一个临时字典,以姓名为键、累加和为值:
mylist = [['Smith, Karen', '10'], ['Miller, Michael', '20'], ['Smith, Karen', '30'], ['Taylor, Peter', '95']]
# 步骤1:用字典聚合
output_dict = {}
for name, num_str in mylist:
output_dict[name] = output_dict.get(name, 0) + int(num_str)
# 步骤2:还原为原始列表格式(可选)
result = [[name, str(total)] for name, total in output_dict.items()]
print(result)
# 输出: [['Smith, Karen', '40'], ['Miller, Michael', '20'], ['Taylor, Peter', '95']]✅ 关键优势:
- 单次遍历完成聚合,性能稳定,4000 条数据毫秒级完成;
- dict.get(key, default) 安全处理首次出现的键,避免 KeyError;
- 数值转换(int())和还原(str())显式可控,便于后续类型校验。
⚠️ 注意事项:
- 确保所有 num_str 可合法转为整数,否则需添加异常处理(如 try/except ValueError);
- 若原始顺序需保留(如首次出现姓名的顺序),可改用 collections.OrderedDict(Python
- 如需最终结果按姓名字母排序,可在还原前对 output_dict.items() 调用 sorted()。
该方法简洁、健壮且符合 Python 数据建模最佳实践——用合适的数据结构(字典)表达语义关系(姓名 → 总数值),而非强行在列表中维护逻辑。










