查看: 164|回复: 0

Python统计次数字典合并与相同键值累加实现教程

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
在Python里做词频或元素计数时,常见做法是先用 dic.get(i,0)+1 生成单个统计字典。当两份数据分别统计完成后,就需要把两个计数字典合并,并让相同键的计数相加,而不是让后一个字典覆盖前一个字典。下面按原文代码拆解统计、合并、调用和注意点。

一、先统计两个列表的元素次数
  1. a = ['a','a','a','c','b','c','d','e','r','w','w','d']
  2. b = ['a','b','a','d','c','r','a','e','r','b','s','w']
  3. def hanshu(A):
  4.     dic = {}
  5.     for i in A:
  6.         dic[i] = dic.get(i,0)+1
  7.     return dic
  8. dictA = hanshu(a)
  9. dictB = hanshu(b)
复制代码
这里 hanshu 接收可迭代对象 A,内部新建 dic。遍历每个元素 i 时,用 dic.get(i,0) 取当前计数,没有则返回 0,再加 1 写回。这样列表中每个不同元素都会成为字典键,值是对应出现次数。
运行后得到:
  1. dictA = {'a': 3, 'c': 2, 'b': 1, 'd': 2, 'e': 1, 'r': 1, 'w': 2}
  2. dictB = {'a': 3, 'b': 2, 'd': 1, 'c': 1, 'r': 2, 'e': 1, 's': 1, 'w': 1}
复制代码

二、合并两个统计字典并累加相同键
原文给出的合并函数如下:
  1. def hanshu2(A,B):
  2.     for k,v in B.items():
  3.         A[k] = A.get(k,0)+v
  4.     return A
  5. dictC = hanshu2(dictA,dictB)
复制代码
hanshu2 的参数 A、B 都是字典。它遍历 B.items(),拿到 B 中的每个键 k 和计数 v;然后执行 A.get(k,0)+v。如果 k 已经在 A 中,就在 A 原计数上加上 B 的 v;如果 k 不在 A 中,A.get(k,0) 返回 0,相当于把 k 以 v 作为初始计数写入 A。最后返回 A。
合并结果为:
  1. dictC = {'a': 6, 'c': 3, 'b': 3, 'd': 3, 'e': 2, 'r': 3, 'w': 3, 's': 1}
复制代码

三、调用方式与需要注意的地方
调用时写作 dictC = hanshu2(dictA,dictB)。从代码逻辑看,函数内部直接对 A[k] 赋值,因此 hanshu2 会原地修改传入的第一个字典。合并完成后,dictA 和 dictC 指向同一份统计结果,dictA 也会变成合并后的计数。这种写法适合希望直接复用第一个字典的场景;如果后续还要保留原始 dictA,需要先用复制出来的字典作为第一个参数,再执行合并。

四、适用场景
这种“相同键相加、缺失键从 0 开始”的合并方式,适合把多批文本、列表或日志分别统计后的词频、元素次数汇总到一起。核心是 A.get(k,0) 对缺失键返回 0,避免 KeyError,同时保证相同键的计数累加。这里的关键是计数累加,而不是简单替换。

总结:单个统计可用 dic.get(i,0)+1;合并两个计数字典可用 A.get(k,0)+v 并写回 A[k]。原文从 dictA、dictB 到 dictC 的代码和结果,完整展示了这一处理过程;实际调用时注意 hanshu2 会原地修改第一个字典。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-23 12:50 , Processed in 0.546393 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部