登录
首页 >  文章 >  python教程

去重姓名并统计数值的Python实现方法

时间:2026-01-23 12:36:41 444浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《去重姓名并累加数值的Python方法》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

合并重复姓名的列表并累加对应数值:Python高效实现方案

本文介绍如何将包含姓名和数字的嵌套列表按姓名去重,并将相同姓名对应的数字累加,最终以字典或列表形式返回聚合结果,适用于数千条数据的快速处理。

在实际数据处理中,常遇到类似 [['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}

如需保持原始输出格式(即返回嵌套列表),可进一步转换:

# 步骤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 <3.7)或直接依赖 Python 3.7+ 字典的插入序保证;
  • 不推荐使用 list.index() 或双重 for 循环查找重复项——在 4k 数据量下性能显著下降。

综上,以字典为中间聚合结构,是解决此类“按键合并累加”问题最Pythonic、最高效的方式。

理论要掌握,实操不能落!以上关于《去重姓名并统计数值的Python实现方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>