06. 字典百宝箱
列表就像一排带编号的抽屉——你要记住第几号抽屉放了什么。但如果能直接叫出名字来拿东西,是不是更方便?字典就是这样的"百宝箱":每个东西都有独一无二的钥匙。
🏫 校园类比:你去学校失物招领处找东西。如果用列表,你得说"我要第 3 个抽屉里的东西"——但谁知道第 3 个抽屉是什么?用字典就不一样了,你直接说"我要贴了’水壶’标签的那个",管理员一秒就能找到!字典就是用**标签(键)而不是编号(索引)**来存东西的。
6.1 什么是字典?¶
把字典想象成一个真实的词典📖:你查一个词(键),就能找到对应的解释(值)。
字典 = 键(key) + 值(value)。键就像标签,值就像内容。你可以用键快速找到值。
📖 把 Python 字典想象成《新华字典》¶
你用过《新华字典》吗?查"猫"这个字:
按拼音找到
mao→ 👈 这就是键(key)看到解释"一种会捉老鼠的动物" → 👈 这就是值(value)
Python 字典一模一样!你问 dict["猫"],它立刻给你解释。不用翻页,不用数编号——喊出名字,东西就来。
🧠 视觉化思维:
《新华字典》 Python 字典
┌─────────────┐ ┌──────────────────┐
│ 猫 → 一种会… │ │ "cat" → "猫" │
│ 狗 → 一种会… │ │ "dog" → "狗" │
│ 鸟 → 一种会… │ │ "bird" → "鸟" │
└─────────────┘ └──────────────────┘
查"猫"→翻到那一页 dict["cat"] → "猫"🧠 字典是怎么存东西的?¶
来,想象你往书包里放课本:
📚 书包(字典)里装了三样东西:
┌──────────────┬────────────────┐
│ 键 (标签) │ 值 (东西) │
├──────────────┼────────────────┤
│ "语文书" │ 📖《语文》 │
│ "数学书" │ 📘《数学》 │
│ "铅笔盒" │ ✏️🖊️📏 │
└──────────────┴────────────────┘
你要拿数学书?喊一声 "数学书" → 手就伸进去了!
和列表的区别:列表你得记住"第 2 本"是数学书(容易记错)。🎮 游戏中也是这样! Minecraft 里你的背包物品栏其实就是一个字典——每种物品(键)对应一个数量(值):
{"钻石": 3, "铁剑": 1, "面包": 64}。Roblox 的角色属性也是字典:{"血量": 100, "速度": 50, "跳跃力": 30}。
6.2 字典的基本操作¶
添加和修改¶
删除和检查¶
💡 用
get()而不是[]:当你不确定键是否存在时,get()不会报错,而是返回你指定的默认值。
✋ 动手试试:打造自己的宠物档案¶
💡 常见误区:小心 KeyError!¶
初学者最常遇到的错误之一:
为什么会报错? 因为你问字典要一把不存在的钥匙——就像你在《新华字典》里查一个不存在的字,字典当然没法给你答案!
三个解决方案:
| 方法 | 什么时候用 | 示例 |
|---|---|---|
"英语" in scores | 先问"有没有这把钥匙" | if "英语" in scores: |
scores.get("英语", 0) | 没有就给我一个默认值 | scores.get("英语", 0) → 0 |
try/except | 高级用法,以后会学 | — |
🔑 还有一个陷阱:键是区分大小写的!
dict["Name"]和dict["name"]是两把不同的钥匙。这就像《新华字典》里"查猫"和"查貓"——虽然你认识繁体,但字典只认简体!
6.3 遍历字典¶
🛒 联系生活:你去超市买东西,收银员扫描每件商品就是在"遍历"一个字典——条形码(键)→ 价格(值)。
fruit_prices.items()就是"把货架上的每个价格标签挨个翻过来看一遍"。
6.4 字典的嵌套——百宝箱里有百宝箱 🎁¶
真正的威力在于字典的嵌套——一个箱子里还能装小箱子!
🎒 这就像什么? 你的书包是一个大字典,里面装了好几个小字典:
书包["铅笔盒"]→{"钢笔": 1, "橡皮": 2, "尺子": 1}
书包["课本"]→{"语文": "P32", "数学": "P58"}双层查询:
书包["铅笔盒"]["橡皮"]→2。现实世界到处是嵌套——游戏角色的装备栏、班级的花名册、甚至你的手机通讯录(按姓名分组,每组里有电话、头像)!
来看看嵌套字典在内存里"长什么样"。以 class_2b 为例:
🔍 把 class_2b 展开来看:
class_2b
├── 🔑 "小明" ──→ { "phone": "138-xxxx",
│ "hobby": "编程",
│ "score": 95 }
│
├── 🔑 "小红" ──→ { "phone": "139-xxxx",
│ "hobby": "画画",
│ "score": 88 }
│
└── 🔑 "小刚" ──→ { "phone": "136-xxxx",
"hobby": "足球",
"score": 92 }
查询路径(两次翻字典):
class_2b["小红"]["hobby"]
└──┬──┘ └─┬──┘
第一次翻 第二次翻(在小红的子字典里找 "hobby")🧠 记忆口诀:嵌套字典就像俄罗斯套娃——打开大娃娃(外层字典),里面还有小娃娃(内层字典)。每多一层嵌套,就多加一个
["键名"]。三层嵌套?那就是dict["钥匙1"]["钥匙2"]["钥匙3"],一层一层剥开!
✋ 动手试试:打造你的游戏角色¶
6.5 小练习:单词翻译器 📝¶
用字典做一个迷你英汉翻译器:
6.6 🎮 趣味挑战:生词本大测验¶
用字典做一个互动单词测验:
💡 试试看:把
word_bank字典换成你自己想背的单词。增加更多词条,看看测验还能不能全对!
6.7 字典 vs 列表——什么时候用哪个?¶
| 场景 | 用列表 | 用字典 |
|---|---|---|
| 按顺序排列 | ✅ ["第一", "第二", "第三"] | ❌ |
| 按名字查找 | ❌ | ✅ {"语文": 95, "数学": 88} |
| 需要去重 | ❌ | ✅ 键天然不重复 |
| 需要计数 | ❌ | ✅ 统计词频 word_count[word] += 1 |
🧠 一张图记住区别¶
列表 (list) 字典 (dict)
───────────────── ─────────────────
🔢 用数字找人 🏷️ 用名字找人
["小明", "小红", "小刚"] {"name": "小明", "score": 95}
[0] [1] [2] ↑ ↑
键 值
问话方式: 问话方式:
"第0个是谁?" → "小明" "name 是谁?" → "小明"
"第1个是谁?" → "小红" "score 多少?" → 95
优点:有顺序、可排序 优点:查找快、名字直观
缺点:得记住第几个 缺点:不保证顺序🔍 什么时候用哪个?——一张决策图¶
你手里的数据是……
"排队"型的?(第一名、第二名…)
└─→ 用列表! list = ["冠军", "亚军", "季军"]
"标签"型的?(每个人贴着不同的标签)
└─→ 用字典! dict = {"冠军": "小明", "分数": 100}
"混合"型的?(一个人有两个属性)
└─→ 用嵌套! dict = {"小明": {"名次": 1, "分数": 100}}
"一堆"型的?(只要去重、不要排序)
└─→ 用字典或集合! dict.fromkeys(["猫","猫","狗"]) → {"猫":None, "狗":None}🎯 一句话总结:列表用数字索引(第0个、第1个...);字典用名字索引(“数学成绩”、“小红电话”...)。
掌握了列表和字典,你就拥有了处理数据的"左膀右臂"!接下来,我们来看看字符串还有哪些神奇的操作 👉