
本文介绍使用字典对含姓名与数值的嵌套列表进行去重合并,通过键值映射自动累加同名数值,兼顾可读性与性能(适用于数千条数据)。
在处理类似 [['Smith, Karen', '10'], ['Miller, Michael', '20'], ['Smith, Karen', '30']] 这样的嵌套列表时,核心目标是:按姓名(第一列)分组,并将对应的所有数值(第二列)转换为整数后求和。直接在列表上反复查找、修改效率低且易出错;而 Python 字典天然支持以姓名为键、累加和为值的映射关系,是更简洁、高效且符合语义的设计选择。
以下是推荐实现方式:
mylist = [['Smith, Karen', '10'], ['Miller, Michael', '20'], ['Smith, Karen', '30'], ['Taylor, Peter', '95']]
# 使用字典累积求和
result_dict = {}
for name, num_str in mylist:
result_dict[name] = result_dict.get(name, 0) + int(num_str)
# 转回嵌套列表(如需保持原始格式)
merged_list = [[name, str(total)] for name, total in result_dict.items()]
print(merged_list)
# 输出: [['Smith, Karen', '40'], ['Miller, Michael', '20'], ['Taylor, Peter', '95']]✅ 关键优势说明:
- dict.get(key, default) 安全获取当前姓名的累计值,避免 KeyError;
- 时间复杂度为 O(n),远优于嵌套循环的 O(n²),对约 4000 条数据性能表现优异;
- 自动去重,无需预提取重复项或额外判断逻辑。
⚠️ 注意事项:
- 确保第二列数值字符串可被 int() 正确解析(若含浮点数或空值,需改用 float() 或增加异常处理);
- 若最终必须保留原始列表顺序(如按首次出现顺序排列),可结合 collections.OrderedDict(Python
- 如需进一步扩展(如统计次数、记录明细),建议直接保留字典结构,而非强行转回列表。
综上,将“姓名-数值”关系建模为字典,不仅代码简短清晰,也更贴近问题本质,是此类聚合操作的标准实践。










