Python3 字典
Python3 字典(Dictionary)
🎯 学习目标
掌握 Python 中字典的定义、操作方法及实际应用场景,理解其键值对结构与高效查找机制。能够在项目中灵活使用字典进行数据组织、统计分析和动态配置管理。
🔑 核心重点
| 分类 | 内容 |
|---|---|
| 基本结构 | 使用 {} 或 dict() 创建字典 |
| 键值特性 | 键必须是不可变类型(如字符串、数字、元组) |
| 操作方法 | 增删查改、遍历、合并、默认值处理 |
| 实际应用场景 | 数据映射、缓存、配置文件、JSON 解析等 |
| 性能优化技巧 | 使用 get()、setdefault()、collections.defaultdict() 等 |
📚 详细讲解
一、什么是字典?
字典(Dictionary)是 Python 中最常用的数据结构之一,用于存储键值对(key-value pairs),是一种无序的、可变的集合类型。
✅ 定义方式:
d1 = {"name": "Alice", "age": 25, "city": "Beijing"}
d2 = dict(name="Bob", age=30)
d3 = dict([("x", 1), ("y", 2)]) # 从列表创建
d4 = {} # 空字典
📌 特点:
- 键必须是不可变类型(如
str,int,tuple) - 值可以是任意类型
- 不允许重复键,后出现的键会覆盖前面的值
二、字典的基本操作
✅ 1. 访问元素
user = {"name": "Charlie", "age": 22}
print(user["name"]) # 输出:Charlie
⚠️ 若访问不存在的键会抛出
KeyError,建议使用.get()
✅ 2. 添加或修改元素
user["email"] = "charlie@example.com" # 添加新键值对
user["age"] = 23 # 修改已有键值
✅ 3. 删除元素
del user["email"]
user.pop("age") # 删除指定键并返回值
user.clear() # 清空字典
三、字典常用方法
| 方法名 | 描述 | 示例 |
|---|---|---|
d[key] |
获取键对应的值 | d["name"] |
d.get(key[, default]) |
获取值(若不存在不报错) | d.get("age", 0) |
d.keys() |
返回所有键 | list(d.keys()) |
d.values() |
返回所有值 | list(d.values()) |
d.items() |
返回键值对(元组形式) | list(d.items()) |
d.pop(key[, default]) |
删除键并返回值 | d.pop("age", 0) |
d.update(other_dict) |
合并另一个字典 | d.update({"city": "Shanghai"}) |
d.setdefault(key[, default]) |
若键不存在则设置默认值 | d.setdefault("score", []) |
四、字典推导式(Dictionary Comprehensions)
Python 特有的简洁语法,用于快速构建字典。
✅ 基本格式:
squares = {x: x**2 for x in range(6)}
print(squares)
# 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
✅ 条件筛选:
evens = {k: v for k, v in squares.items() if v % 2 == 0}
print(evens)
# 输出:{0: 0, 2: 4, 4: 16}
五、嵌套字典与复杂结构
✅ 示例:用户信息嵌套结构
users = {
"alice": {
"name": "Alice",
"age": 25,
"hobbies": ["reading", "music"]
},
"bob": {
"name": "Bob",
"age": 30,
"hobbies": ["coding", "gaming"]
}
}
print(users["alice"]["hobbies"][0]) # 输出:reading
✅ 遍历嵌套字典:
for username, info in users.items():
print(f"用户名:{username}")
for key, value in info.items():
print(f"{key}: {value}")
六、默认值处理与高级用法
✅ 1. dict.get(key, default)
避免 KeyError,推荐使用:
print(user.get("gender", "未知")) # 默认返回“未知”
✅ 2. dict.setdefault(key, default)
如果键不存在就设置默认值,适合初始化列表或计数器:
scores = {}
scores.setdefault("math", []).append(90)
scores.setdefault("math", []).append(85)
print(scores) # {'math': [90, 85]}
✅ 3. collections.defaultdict
自动为不存在的键设置默认值类型:
from collections import defaultdict
dd = defaultdict(list)
dd["fruits"].append("apple")
dd["fruits"].append("banana")
print(dd["vegetables"]) # 输出:[] (不会报错)
⚠️ 注意事项
- 字典是无序的(Python 3.7+ 保持插入顺序,但逻辑上仍应视为无序)
- 键必须是不可变对象(如
int,str,tuple),不能是list或dict - 避免在遍历过程中修改字典大小(如删除/添加键),否则可能引发异常或跳过项
- 使用
in判断键是否存在,而不是判断值 - 多层嵌套字典应使用
get()避免 KeyError
🧪 实际案例分析
📌 场景:统计单词频率
给定一段英文文本,统计每个单词出现的次数。
text = """
Python is great and Python is easy to learn.
You should learn Python now!
"""
import string
# 去除标点符号
translator = str.maketrans('', '', string.punctuation)
cleaned_text = text.translate(translator).lower()
# 统计词频
word_count = {}
for word in cleaned_text.split():
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
📌 输出示例:
{'python': 3, 'is': 2, 'great': 1, 'and': 1, 'easy': 1, 'to': 1, 'learn': 1, 'you': 1, 'should': 1, 'now': 1}
📌 应用:
- 文本分析
- 自然语言处理
- 关键词提取
- 日志统计工具
🧩 拓展练习(动手实践)
- 编写一个函数
merge_dicts(*dicts),将多个字典合并为一个,冲突键以最后一个为准。 - 输入一组学生数据(学号、姓名、成绩),使用字典按学号组织,并支持按姓名查找。
- 实现一个电话簿程序,支持添加、查询、删除联系人信息。
- 使用字典实现斐波那契数列的缓存计算(记忆化递归)。
- 编写程序读取 JSON 文件内容并转换为 Python 字典,打印其中某些字段。
📚 推荐阅读
- Python 官方文档 - 字典
- 《流畅的 Python》第 3 章 - 映射与字典推导式
- 廖雪峰 Python 教程 - 字典
- 菜鸟教程 - Python 字典
- Python 编程从入门到实践 - 第 6 章 - 字典简介
🧭 下一步建议
- 下一章学习内容:《Python3 集合(Set)详解》
- 掌握集合的去重、交并差运算等数学特性
- 学习集合与字典的结合使用
- 探索集合在数据分析、去重清洗中的应用
- 结合字典与集合知识,尝试编写数据统计与分析程序
如果你希望我为你提供:
- Python 字典常用方法速查表 PDF
- 更多实战项目练习题(如通讯录系统、缓存实现、词频统计器等)
- 字典推导式高级用法详解
- 字典性能调优指南(如内存占用、查找效率等)
- 视频教学资源推荐(中文讲解)
欢迎随时告诉我 😊

浙公网安备 33010602011771号