学径XUEJING · 个人学习平台通知设置

课程库 AI 主线 程序思维基础 › 第 2

字典 —— 键值对:现实世界数据的形状

普通课55 分钟

本课导读

列表按位置存取,但现实里更多时候你想"按名字查":通讯录按人名查电话,档案按字段查信息。本课学 Python 的第二大容器——字典(键值对),它是现实世界数据的天然形状,也是你未来对接 API、处理 JSON 数据的直觉基础。

列表的不顺手时刻

用列表存一个人的信息试试:

person = ["小雨", 28, "上海", "设计师"]
print(person[2])   # 这是……城市?还是职业?

person[2] 是什么,全靠记忆。字段一多必出乱子。问题的根源:这类数据不是"一串同类东西",而是"一组有名字的属性"——它需要的不是位置,是标签。

字典:给每个值贴上标签

Python

语法拆解:

  • 花括号 {} 创建字典,每项是 键: 值(key: value),逗号分隔
  • 是标签(通常用字符串),是数据(任何类型都行)
  • 字典[键] 取值——像查通讯录:报名字,得电话

注意最后一行的细节:f-string 本身用了双引号,里面的键就得用单引号 person['name'](Python 单双引号等价,正好用来错开嵌套)。

提示

类比记忆:列表是一排编号的储物柜(按柜号取),字典是贴了标签的抽屉(按标签取)。要顺序、要一串同类 → 列表;要按名查、字段各异 → 字典。

增、改、查、防

Python
  • 字典[键] = 值:一个动作两种效果——键不存在就新增,存在就覆盖
  • 直接取不存在的键 → KeyError(报错家族第三位常客)
  • 键 in 字典:先探路再取值,是最基本的防御写法

遍历字典

字典也能 for,遍历的是,拿到键就能顺藤摸瓜取值:

Python

for day, count in steps.items() 一次拿到一对键值——两种写法都常见,先用顺手的那种。

组合拳:字典 × 列表

真实数据往往是两层的:一个列表,装着很多个字典——比如一个班的学生、一批订单。这正是你以后从 API 拿到的 JSON 数据的标准形状,先混个脸熟:

Python

读法从外往里:books 是列表 → 每个 book 是字典 → book['title'] 按标签取值。嵌套结构会在阶段 1 正式展开,今天能看懂这段就够了。

✍️ 练习

练习 1:我的名片

建一个描述你自己的字典(至少 4 个键),先整体打印,再用 f-string 拼一句自我介绍;然后给字典新增一个键 "goal",值为 "转行 AI",再打印整个字典。

Python
✅ 参考答案
me = {
    "name": "阿杰",
    "age": 30,
    "city": "成都",
    "hobby": "爬山"
}

print(me)
print(f"我是{me['name']},{me['age']} 岁,坐标{me['city']},爱好{me['hobby']}")

me["goal"] = "转行 AI"
print(me)

练习 2:投票计数器

统计投票列表里每个选项各得几票,用字典存结果。(这是字典最经典的应用——计数。)

Python
💡 提示

遍历 votes,对每张票:如果这个选项已经在 counts 里,票数加 1;否则创建它并设为 1。正好用上 in 和"赋值即创建"。

✅ 参考答案
votes = ["A", "B", "A", "C", "B", "A", "A", "C"]

counts = {}
for v in votes:
    if v in counts:
        counts[v] = counts[v] + 1
    else:
        counts[v] = 1

print(counts)
for option, n in counts.items():
    print(f"选项 {option}:{n} 票")

“遍历 + 字典计数”这个模式请重点收藏:统计词频、分组汇总,本质全是它。

练习 3:图书检索(挑战)

用上面"字典 × 列表"的 books 数据:找出页数超过 100 的书并打印书名;再算出所有书的总页数。

Python
✅ 参考答案
books = [
    {"title": "小王子", "pages": 96},
    {"title": "活着", "pages": 191},
    {"title": "三体", "pages": 302}
]

total_pages = 0
for book in books:
    if book["pages"] > 100:
        print(f"《{book['title']}》超过 100 页")
    total_pages = total_pages + book["pages"]

print(f"总页数:{total_pages}")

遍历列表拿到字典、按键取值、条件筛选、累加——四个已学动作的自然组合。以后的数据分析代码,骨架就长这样。

随堂测验

随堂测验0 / 5 题正确

1. “存一个人的姓名、年龄、城市”和“存全班 40 人的名字”,分别适合用什么?

2. d = {"a": 1},执行 d["b"] = 2 之后 d 是什么?

3. 想安全地查看字典里有没有“丽丽”这个键,推荐的写法是?

4. for day, count in steps.items(): 这个写法的作用是?

5. data = [{"name": "甲"}, {"name": "乙"}],取出“乙”的写法是?

本课小结

  • 字典 = 贴标签的抽屉:{"键": 值};取值按键不按位置
  • 字典[键] = 值:不存在即新增,存在即覆盖;读取不存在的键报 KeyError,用 in 探路
  • 遍历:for k in d 拿键,for k, v in d.items() 拿键值对
  • 列表套字典 = 真实数据(和未来 JSON)的标准形状;"遍历 + 字典计数"是必藏套路

下一课回到字符串——这次不只是打印它,而是切它、洗它、拆它。

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…