图解python | 字典
字典是 Python 中键值对(Key-Value) 结构的无序可变容器,核心特点是 “通过键快速查找值”,就像现实中的字典(通过拼音 / 部首找汉字),下面用「图解 + 实战」拆解字典的核心逻辑。
一、字典的核心结构(图解)
1. 字典的 “物理” 结构(简化版)
plaintext
┌───────────────────────────────────────┐
│ 字典 (dict) │
│ ┌─────────┬─────────┐ ┌─────────┬─────────┐ │
│ │ 键 │ 值 │ │ 键 │ 值 │ │
│ │ (Key) │ (Value) │ │ (Key) │ (Value) │ │
│ ├─────────┼─────────┤ ├─────────┼─────────┤ │
│ │ "name" │ "小明" │ │ "age" │ 18 │ │
│ ├─────────┼─────────┤ ├─────────┼─────────┤ │
│ │ "score" │ [90,85] │ │ "is_ok" │ True │ │
│ └─────────┴─────────┘ └─────────┴─────────┘ │
└───────────────────────────────────────┘
- 键(Key):唯一、不可变(只能是字符串 / 数字 / 元组,不能是列表),相当于 “索引”;
- 值(Value):可重复、可任意类型(数字 / 字符串 / 列表 / 字典等),相当于 “内容”;
- 核心关系:1 个键对应 1 个值,键不能重复(重复会覆盖),值可以重复。
2. 字典与列表的对比(图解)
| 维度 | 字典(Dict) | 列表(List) |
|---|---|---|
| 索引方式 | 用 “键” 查找(如 dict["name"]) |
用 “下标” 查找(如 list[0]) |
| 结构图解 | {键1:值1, 键2:值2} |
[值1, 值2, 值3] |
| 查找效率 | 快(哈希表底层,直接定位) | 慢(需遍历) |
| 有序性 | Python 3.7+ 有序,3.6- 无序 | 始终有序 |
二、字典的核心操作(图解 + 代码)
1. 定义字典(创建)
python
运行
# 空字典
empty_dict = {}
# 普通字典(键值对用冒号分隔,整体用大括号)
student = {
"name": "小明", # 键:字符串,值:字符串
"age": 18, # 键:字符串,值:数字
"score": [90, 85, 95], # 键:字符串,值:列表
(1,2): "坐标" # 键:元组(不可变),值:字符串
}
图解创建过程:
plaintext
创建student字典 → 分配内存空间 → 存入键值对:
"name" → 指向 "小明"
"age" → 指向 18
"score" → 指向 [90,85,95]
2. 访问值(查)
python
运行
# 方式1:键取值(最常用)
print(student["name"]) # 输出:小明
# 方式2:get()方法(推荐,键不存在不报错)
print(student.get("age")) # 输出:18
print(student.get("gender", "未知")) # 键不存在,返回默认值:未知
图解取值逻辑:
plaintext
查找student["name"] → 计算"name"的哈希值 → 定位到内存中"小明"的位置 → 返回值
3. 修改 / 新增值(改 / 增)
python
运行
# 修改(键存在则覆盖值)
student["age"] = 19
# 新增(键不存在则添加新键值对)
student["gender"] = "男"
图解修改后结构:
plaintext
┌───────────────────────────────────────┐
│ student 字典 │
│ "name": "小明", "age": 19, │
│ "score": [90,85,95], "gender": "男" │
└───────────────────────────────────────┘
4. 删除键值对(删)
python
运行
# del 关键字
del student["score"]
# pop()方法(删除并返回值)
age = student.pop("age")
# 清空字典
student.clear()
图解删除后结构:
plaintext
删除"score"后 → student字典变为:
{"name": "小明", "age": 19, "gender": "男"}
5. 遍历字典(常用)
python
运行
student = {"name": "小明", "age": 18, "gender": "男"}
# 遍历所有键
for key in student.keys():
print(key) # 输出:name、age、gender
# 遍历所有值
for value in student.values():
print(value) # 输出:小明、18、男
# 遍历键值对(最常用)
for key, value in student.items():
print(f"{key}: {value}")
图解遍历逻辑:
plaintext
遍历student.items() → 逐个取出键值对:
第1次:key="name", value="小明"
第2次:key="age", value=18
第3次:key="gender", value="男"
三、字典的核心特性(图解总结)
| 特性 | 说明 | 图解记忆 |
|---|---|---|
| 键唯一 | 重复键会覆盖旧值 | {"a":1, "a":2} → 最终{"a":2} |
| 键不可变 | 列表不能做键(可变),元组可以(不可变) | {[1,2]:3} ❌ / {(1,2):3} ✅ |
| 无序(3.6-) | 不保证插入顺序,3.7+ 修复为有序 | 3.6-:{"a":1, "b":2} 可能显示为{"b":2, "a":1} |
| 可变 | 可新增 / 修改 / 删除键值对 | 字典内容可动态变化 |
四、实战案例(字典的典型用法)
案例:统计字符串中字符出现次数
python
运行
text = "hello python"
count_dict = {}
# 遍历字符,统计次数
for char in text:
if char != " ": # 排除空格
# 键存在则+1,不存在则设为1
count_dict[char] = count_dict.get(char, 0) + 1
print(count_dict)
# 输出:{'h':1, 'e':1, 'l':2, 'o':2, 'p':1, 'y':1, 't':1, 'n':1}
图解执行过程:
plaintext
初始count_dict = {}
遍历到"h" → count_dict["h"] = 0+1 → {"h":1}
遍历到"e" → count_dict["e"] = 0+1 → {"h":1, "e":1}
遍历到"l" → count_dict["l"] = 0+1 → {"h":1, "e":1, "l":1}
再次遍历到"l" → count_dict["l"] = 1+1 → {"h":1, "e":1, "l":2}
... 以此类推
总结
字典的核心是「键值对映射」,记住 3 个关键点:
- 键是 “唯一索引”,值是 “对应内容”;
- 取值优先用
get()(避免键不存在报错); - 适合场景:快速查找、数据关联存储(如用户信息、统计计数)。

浙公网安备 33010602011771号