pin_drop当前位置:知识文库 ❯ 图文

Python字典setdefault()方法

概述

setdefault() 方法用于获取字典中指定键的值。如果键存在,返回对应的值;如果键不存在,则将键和默认值插入字典,并返回默认值。它是实现"键不存在则初始化"模式的最简洁方式,特别适合分组统计等场景。


语法

代码示例

dict.setdefault(key[, default])
参数 说明
key 要查找的键
default 可选,键不存在时设置的默认值(默认为 None)

返回值:键对应的值(键存在)或默认值(键不存在)


基本用法

键存在时

代码示例

person = {"name": "Alice", "age": 25}
result = person.setdefault("name", "Unknown")
print(f"返回值: {result}")
print(f"字典: {person}")

输出:

代码示例

返回值: Alice
字典: {'name': 'Alice', 'age': 25}

键不存在时

代码示例

person = {"name": "Alice", "age": 25}
result = person.setdefault("city", "Beijing")
print(f"返回值: {result}")
print(f"字典: {person}")

输出:

代码示例

返回值: Beijing
字典: {'name': 'Alice', 'age': 25, 'city': 'Beijing'}

不指定默认值

代码示例

person = {"name": "Alice"}
result = person.setdefault("age")
print(f"返回值: {result}")
print(f"字典: {person}")

输出:

代码示例

返回值: None
字典: {'name': 'Alice', 'age': None}

setdefault 与 get 对比

特性 setdefault() get()
键存在 返回值 返回值
键不存在 插入默认值并返回 返回默认值,不插入
修改字典 可能修改 不修改
默认值 None None

代码示例

d1 = {"a": 1}
d2 = {"a": 1}

d1.setdefault("b", 2)
d2.get("b", 2)

print("setdefault后:", d1)
print("get后:", d2)

输出:

代码示例

setdefault后: {'a': 1, 'b': 2}
get后: {'a': 1}

常见应用场景

分组统计

代码示例

words = ["apple", "banana", "avocado", "blueberry", "cherry", "apricot"]
groups = {}
for word in words:
    groups.setdefault(word[0], []).append(word)
print(groups)

输出:

代码示例

{'a': ['apple', 'avocado', 'apricot'], 'b': ['banana', 'blueberry'], 'c': ['cherry']}

计数器

代码示例

text = "abracadabra"
counts = {}
for char in text:
    counts.setdefault(char, 0)
    counts[char] += 1
print(counts)

输出:

代码示例

{'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}

初始化嵌套字典

代码示例

data = {}
data.setdefault("users", {})
data["users"].setdefault("admin", {"role": "admin"})
print(data)

输出:

代码示例

{'users': {'admin': {'role': 'admin'}}}

注意事项

提示:可变默认值陷阱:setdefault(key, []) 每次调用都会创建新的空列表,但只在键不存在时使用。这不会导致共享引用问题。

提示:与 defaultdict 对比:collections.defaultdict 可以更优雅地实现相同功能,但 setdefault 不需要额外导入。

提示:原地修改:键不存在时会修改字典。


小结

  • setdefault(key, default) 键存在返回值,不存在则插入默认值

  • get() 的核心区别:setdefault 会插入不存在的键

  • 特别适合分组统计和初始化场景

  • defaultdict 是更优雅的替代方案


常见问题

setdefault() 与 get() 的核心区别是什么?

两者在键存在时行为相同,都返回值。但键不存在时,setdefault() 会将键和默认值插入字典,而 get() 只返回默认值不修改字典。

setdefault() 适合哪些应用场景?

特别适合分组统计(如按首字母分组)、计数器初始化、嵌套字典初始化等场景。

setdefault() 与 defaultdict 有什么区别?

defaultdict 是 collections 模块的类,创建时指定默认工厂函数,访问不存在的键时自动创建默认值。setdefault 是内置方法,不需要额外导入但每次调用都需要指定默认值。

setdefault() 不指定默认值时会怎样?

如果键不存在且不指定默认值,会将键插入字典并将值设为 None,同时返回 None。

练习1

使用 setdefault() 编写一个函数 group_by_length(words),将单词按长度分组。例如 ["a", "ab", "abc", "de"]{1: ["a"], 2: ["ab", "de"], 3: ["abc"]}

练习2

使用 setdefault() 实现一个简单的学生成绩管理:添加学生和科目成绩,如果学生不存在则创建,如果科目不存在则添加。测试添加多个学生的多科成绩。

标签: 字典方法 setdefault() 默认值 分组统计 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python字典pop()方法 下一篇: Python字典fromkeys()方法

poll相关推荐