Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

PyFirst

06. 字典百宝箱

列表就像一排带编号的抽屉——你要记住第几号抽屉放了什么。但如果能直接叫出名字来拿东西,是不是更方便?字典就是这样的"百宝箱":每个东西都有独一无二的钥匙。

🏫 校园类比:你去学校失物招领处找东西。如果用列表,你得说"我要第 3 个抽屉里的东西"——但谁知道第 3 个抽屉是什么?用字典就不一样了,你直接说"我要贴了’水壶’标签的那个",管理员一秒就能找到!字典就是用**标签(键)而不是编号(索引)**来存东西的。


6.1 什么是字典?

把字典想象成一个真实的词典📖:你查一个词(键),就能找到对应的解释(值)。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

字典 = 键(key) + 值(value)。键就像标签,值就像内容。你可以用键快速找到值。

📖 把 Python 字典想象成《新华字典》

你用过《新华字典》吗?查"猫"这个字:

  1. 按拼音找到 mao → 👈 这就是键(key)

  2. 看到解释"一种会捉老鼠的动物" → 👈 这就是值(value)

Python 字典一模一样!你问 dict["猫"],它立刻给你解释。不用翻页,不用数编号——喊出名字,东西就来。

🧠 视觉化思维:

《新华字典》                    Python 字典
┌─────────────┐              ┌──────────────────┐
│ 猫 → 一种会… │              │ "cat" → "猫"      │
│ 狗 → 一种会… │              │ "dog" → "狗"      │
│ 鸟 → 一种会… │              │ "bird" → "鸟"     │
└─────────────┘              └──────────────────┘
  查"猫"→翻到那一页               dict["cat"] → "猫"

🧠 字典是怎么存东西的?

来,想象你往书包里放课本:

📚 书包(字典)里装了三样东西:
┌──────────────┬────────────────┐
│   键 (标签)   │   值 (东西)     │
├──────────────┼────────────────┤
│  "语文书"     │  📖《语文》     │
│  "数学书"     │  📘《数学》     │
│  "铅笔盒"     │  ✏️🖊️📏       │
└──────────────┴────────────────┘

你要拿数学书?喊一声 "数学书" → 手就伸进去了!
和列表的区别:列表你得记住"第 2 本"是数学书(容易记错)。

🎮 游戏中也是这样! Minecraft 里你的背包物品栏其实就是一个字典——每种物品(键)对应一个数量(值):{"钻石": 3, "铁剑": 1, "面包": 64}。Roblox 的角色属性也是字典:{"血量": 100, "速度": 50, "跳跃力": 30}


6.2 字典的基本操作

添加和修改

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

删除和检查

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 get() 而不是 []:当你不确定键是否存在时,get() 不会报错,而是返回你指定的默认值。

✋ 动手试试:打造自己的宠物档案

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 常见误区:小心 KeyError!

初学者最常遇到的错误之一:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

为什么会报错? 因为你问字典要一把不存在的钥匙——就像你在《新华字典》里查一个不存在的字,字典当然没法给你答案!

三个解决方案:

方法什么时候用示例
"英语" in scores先问"有没有这把钥匙"if "英语" in scores:
scores.get("英语", 0)没有就给我一个默认值scores.get("英语", 0) → 0
try/except高级用法,以后会学

🔑 还有一个陷阱:键是区分大小写的!dict["Name"]dict["name"] 是两把不同的钥匙。这就像《新华字典》里"查猫"和"查貓"——虽然你认识繁体,但字典只认简体!


6.3 遍历字典

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🛒 联系生活:你去超市买东西,收银员扫描每件商品就是在"遍历"一个字典——条形码(键)→ 价格(值)。fruit_prices.items() 就是"把货架上的每个价格标签挨个翻过来看一遍"。


6.4 字典的嵌套——百宝箱里有百宝箱 🎁

真正的威力在于字典的嵌套——一个箱子里还能装小箱子!

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🎒 这就像什么? 你的书包是一个大字典,里面装了好几个小字典:

  • 书包["铅笔盒"]{"钢笔": 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"],一层一层剥开!

✋ 动手试试:打造你的游戏角色

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

6.5 小练习:单词翻译器 📝

用字典做一个迷你英汉翻译器:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

6.6 🎮 趣味挑战:生词本大测验

用字典做一个互动单词测验:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 试试看:把 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}
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🎯 一句话总结:列表用数字索引(第0个、第1个...);字典用名字索引(“数学成绩”、“小红电话”...)。


掌握了列表和字典,你就拥有了处理数据的"左膀右臂"!接下来,我们来看看字符串还有哪些神奇的操作 👉