Python字典setdefault()与get()方法深度对比及defaultdict应用
本文详细对比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学习提供参考,欢迎持续支持本站获取更多内容。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













