Python字典setdefault()与get()方法深度对比及defaultdict应用

Finn
Finn
发布时间:2026-10-13| 6人浏览过
原创

本文详细对比Python字典中setdefault()与get()方法的行为差异,通过字符计数示例展示两者在代码实现上的不同。同时引入collections模块中的defaultdict工厂函数,演示如何更优雅地处理默认值缺失问题,并提供三种常见写法的代码对比,帮助开发者选择最优方案。

setdefault与get方法基础对比

dict.setdefault(key, default=None) 该方法在字典中已存在指定键时,直接返回对应的值;若键不存在,则先设置该键为默认值(默认为None),并返回此默认值。

dict.get(key, default=None) 该方法在字典中已存在指定键时,返回对应的值;若键不存在,则直接返回指定的默认值(默认为None),不会修改字典内容。

字符计数实战示例

示例场景:遍历字符串message中的每个字符,统计每个字符出现的频次。


import pprint
message = "It is a good day, is not it?I mean the weather is good today." 
count1 = {}
for char in message:
 count1.setdefault(char, 0)
 count1[char] += 1 
count2 = {}
for char in message:
 count2[char] = count2.get(char, 0) + 1 
pprint.pprint(count1)
pprint.pprint(count2)

defaultdict工厂函数详解

扩展知识:

defaultdict属于collections模块下的一个工厂函数,用于创建字典对象。它接收一个可调用对象(如list、int等)作为参数,该参数返回的类型即为字典中key对应的value的默认类型。

具体示例如下:

常规写法实现:

三种字典构建写法对比


data = [("p", 1), ("p", 2), ("p", 3),
  ("h", 1), ("h", 2), ("h", 3)]
result = {}
for (key, value) in data:
 if key not in result:
  result[key] = []
 result[key].append(value)

使用setdefault方法实现:


result = {}
data = [("p", 1), ("p", 2), ("p", 3),
  ("h", 1), ("h", 2), ("h", 3)]
for (key, value) in data:
 result.setdefault(key, []).append(value)

使用defaultdict方法实现:


from collections import defaultdict
result = defaultdict(list)
data = [("p", 1), ("p", 2), ("p", 3),
  ("h", 1), ("h", 2), ("h", 3)]
for (key, value) in data:
 result[key].append(value)

以上为本文全部内容,希望能为您的Python学习提供参考,欢迎持续支持本站获取更多内容。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。