字典 —— 键值对:现实世界数据的形状
普通课约 55 分钟
本课导读
列表按位置存取,但现实里更多时候你想"按名字查":通讯录按人名查电话,档案按字段查信息。本课学 Python 的第二大容器——字典(键值对),它是现实世界数据的天然形状,也是你未来对接 API、处理 JSON 数据的直觉基础。
列表的不顺手时刻
用列表存一个人的信息试试:
person = ["小雨", 28, "上海", "设计师"]
print(person[2]) # 这是……城市?还是职业?
person[2] 是什么,全靠记忆。字段一多必出乱子。问题的根源:这类数据不是"一串同类东西",而是"一组有名字的属性"——它需要的不是位置,是标签。
字典:给每个值贴上标签
语法拆解:
- 花括号
{}创建字典,每项是键: 值(key: value),逗号分隔 - 键是标签(通常用字符串),值是数据(任何类型都行)
字典[键]取值——像查通讯录:报名字,得电话
注意最后一行的细节:f-string 本身用了双引号,里面的键就得用单引号 person['name'](Python 单双引号等价,正好用来错开嵌套)。
提示
类比记忆:列表是一排编号的储物柜(按柜号取),字典是贴了标签的抽屉(按标签取)。要顺序、要一串同类 → 列表;要按名查、字段各异 → 字典。
增、改、查、防
字典[键] = 值:一个动作两种效果——键不存在就新增,存在就覆盖- 直接取不存在的键 →
KeyError(报错家族第三位常客) 键 in 字典:先探路再取值,是最基本的防御写法
遍历字典
字典也能 for,遍历的是键,拿到键就能顺藤摸瓜取值:
for day, count in steps.items() 一次拿到一对键值——两种写法都常见,先用顺手的那种。
组合拳:字典 × 列表
真实数据往往是两层的:一个列表,装着很多个字典——比如一个班的学生、一批订单。这正是你以后从 API 拿到的 JSON 数据的标准形状,先混个脸熟:
读法从外往里:books 是列表 → 每个 book 是字典 → book['title'] 按标签取值。嵌套结构会在阶段 1 正式展开,今天能看懂这段就够了。
✍️ 练习
练习 1:我的名片
建一个描述你自己的字典(至少 4 个键),先整体打印,再用 f-string 拼一句自我介绍;然后给字典新增一个键 "goal",值为 "转行 AI",再打印整个字典。
✅ 参考答案
me = {
"name": "阿杰",
"age": 30,
"city": "成都",
"hobby": "爬山"
}
print(me)
print(f"我是{me['name']},{me['age']} 岁,坐标{me['city']},爱好{me['hobby']}")
me["goal"] = "转行 AI"
print(me)
练习 2:投票计数器
统计投票列表里每个选项各得几票,用字典存结果。(这是字典最经典的应用——计数。)
💡 提示
遍历 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 的书并打印书名;再算出所有书的总页数。
✅ 参考答案
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}")
遍历列表拿到字典、按键取值、条件筛选、累加——四个已学动作的自然组合。以后的数据分析代码,骨架就长这样。
随堂测验
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)的标准形状;"遍历 + 字典计数"是必藏套路
下一课回到字符串——这次不只是打印它,而是切它、洗它、拆它。
划选正文任意文字可高亮、批注或加入复习卡
讨论
载入中…