pin_drop当前位置:知识文库 ❯ 图文
Python字典setdefault()方法
概述
setdefault() 方法用于获取字典中指定键的值。如果键存在,返回对应的值;如果键不存在,则将键和默认值插入字典,并返回默认值。它是实现"键不存在则初始化"模式的最简洁方式,特别适合分组统计等场景。
语法
代码示例
dict.setdefault(key[, default])返回值:键对应的值(键存在)或默认值(键不存在)
基本用法
键存在时
代码示例
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 对比
代码示例
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() 实现一个简单的学生成绩管理:添加学生和科目成绩,如果学生不存在则创建,如果科目不存在则添加。测试添加多个学生的多科成绩。
本文涉及AI创作
内容由AI创作,请仔细甄别