news 2026/5/10 20:34:17

Python 一行代码实现计数统计:dict.get() 的巧妙用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 一行代码实现计数统计:dict.get() 的巧妙用法

Python 一行代码实现计数统计:dict.get()的巧妙用法

在 Python 中统计元素出现次数是一个常见需求。今天分享一个经典且优雅的写法,只需一行代码就能搞定:

app_stats[entry.app_id]=app_stats.get(entry.app_id,0)+1

场景还原

假设我们在分析日志,需要统计每个app_id出现的次数:

fromtypingimportDict# 假设 self.entries 包含多条日志记录app_stats:Dict[int,int]={}# 用于存储统计结果forentryinself.entries:# 统计每个 app_id 出现的次数app_stats[entry.app_id]=app_stats.get(entry.app_id,0)+1# 输出结果示例:{15: 3, 16: 2, 17: 1}# 表示 app_id=15 出现3次,16出现2次,17出现1次

拆解这行代码

app_stats[entry.app_id]=app_stats.get(entry.app_id,0)+1│ │ │ │ │ │ │ │ │ └─ 如果不存在,从0开始计数 │ │ │ └─ 查找的键(app_id) │ │ └─ dict.get(key,default)方法 │ └─ 将结果存回字典 └─ 目标字典

执行逻辑:

情况get()返回值计算结果效果
app_id第一次出现0(默认值)0 + 1 = 1初始化计数为1
app_id已存在当前计数(如3)3 + 1 = 4计数加1

为什么用get()而不是[]

Python 字典有两种访问方式:

# 方式1:用 [] 访问(不推荐用于计数)app_stats[15]# 如果15不存在,直接抛出 KeyError!# 方式2:用 get() 访问(推荐)app_stats.get(15,0)# 如果15不存在,返回默认值 0,不报错

dict.get(key, default)的优势:

  • 键存在时:返回对应的值
  • 键不存在时:返回指定的默认值(不会报错)
  • 完美适合"第一次初始化,之后累加"的场景

执行流程图解

假设日志中的app_id序列为:[15, 15, 15, 16, 16]

初始:app_stats={}1(15):get(15,0)→ 返回00+1=1→ app_stats={15:1}2(15):get(15,0)→ 返回11+1=2→ app_stats={15:2}3(15):get(15,0)→ 返回22+1=3→ app_stats={15:3}4(16):get(16,0)→ 返回00+1=1→ app_stats={15:3,16:1}5(16):get(16,0)→ 返回11+1=2→ app_stats={15:3,16:2}最终结果:{15:3,16:2}

对比:冗长写法 vs 简洁写法

传统写法(需要 if-else):

ifentry.app_idinapp_stats:app_stats[entry.app_id]=app_stats[entry.app_id]+1else:app_stats[entry.app_id]=1

优雅写法(一行搞定):

app_stats[entry.app_id]=app_stats.get(entry.app_id,0)+1

对比结果:

  • ✅ 代码更简洁(1行 vs 4行)
  • ✅ 逻辑更清晰(无需分支判断)
  • ✅ 效率更高(只查询一次字典)

实际应用场景

这种写法广泛应用于:

# 1. 词频统计word_count={}forwordintext.split():word_count[word]=word_count.get(word,0)+1# 2. 投票统计votes={}forvoteinballot:votes[vote]=votes.get(vote,0)+1# 3. 错误日志统计error_stats={}forerrorinlog_errors:error_stats[error.code]=error_stats.get(error.code,0)+1

进阶:用 collections.Counter

如果你不需要手动控制过程,Python 提供了更高级的工具:

fromcollectionsimportCounter# 一行代码完成全部统计app_stats=Counter(entry.app_idforentryinself.entries)# 结果:Counter({15: 3, 16: 2})

但在需要自定义统计逻辑边遍历边处理的场景下,dict.get()的写法依然是最灵活、最经典的选择。

总结

stats[key]=stats.get(key,0)+1

这行代码堪称 Python 计数字典的标准范式

  • 利用get()的默认值特性,巧妙地解决了"初始化+累加"的问题
  • 将原本需要条件判断的逻辑压缩成一行
  • 既安全又高效,是 Pythonic 代码的典型代表

下次需要统计元素频次时,试试这行代码吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 8:21:49

大模型学习路线图:从概念到实践(程序员必备,建议收藏)

本文全面介绍了大模型的基本概念、训练过程、应用领域、发展趋势及挑战。大模型是包含超大规模参数的神经网络模型,通过预训练和微调获得知识,具备涌现和泛化能力。当前大模型广泛应用于语言、音频、视觉等领域,呈现"百模大战"和&q…

作者头像 李华
网站建设 2026/5/10 20:33:24

基于深度学习的交通标志识别研究与应用

目录 深度学习在交通标志识别中的核心方法关键技术优化方向实际应用场景部署性能评估指标 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 深度学习在交通标志识别中的核心方法 卷积神经网络(…

作者头像 李华
网站建设 2026/5/8 23:45:07

【开题答辩全过程】以 基于Java的九价疫苗预约系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/5/5 1:55:07

HighGoDB 用户密码安全策略

文章目录 环境文档用途详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.3.2 文档用途 通过调用函数的方式增强用户密码的安全性 详细信息 一般来说数据库密码安全管理要考虑以下几个方面 : 密码过期策略, 决定密码的有效期…

作者头像 李华
网站建设 2026/5/7 11:07:22

Substance P (1-9) ;RPKPQPFG

一、基础信息 英文名称:Substance P (1-9)三字母序列:Arg-Pro-Lys-Pro-Gln-Gln-Phe-Phe-Gly单字母序列:RPKPQPFG精确分子量:1104.28 Da等电点(pI):6.2~6.7,弱酸性分子式&#xff1a…

作者头像 李华
网站建设 2026/5/2 17:42:44

深度测评 9个AI论文软件:研究生毕业论文与科研写作必备工具全解析

在当前科研任务日益繁重的背景下,研究生群体面临着论文写作、文献检索、格式规范等多重挑战。如何高效利用AI工具提升写作效率与质量,已成为学术研究中的关键课题。为了帮助用户更科学地选择适合自己的AI论文写作工具,本次测评基于2026年最新…

作者头像 李华