字典
本节目标
学完这一节,你会知道:
- 字典是什么,为什么要用键值对保存数据
- 如何读取、新增、修改、删除字典内容
- 如何用
get()安全读取 - 如何遍历字典的键和值
- 如何用字典保存一条学生资料
列表适合保存一组同类数据,字典适合保存“一个对象的多项信息”。
先跑一个例子
新建文件 dict_demo.py,写入:
student = {
"name": "小明",
"age": 18,
"city": "成都",
"score": 85,
}
student["score"] = 92
student["goal"] = "学会 Python"
print(f"姓名:{student['name']}")
print(f"成绩:{student['score']}")
print(f"目标:{student['goal']}")
运行:
python3 dict_demo.py
你会看到:
姓名:小明
成绩:92
目标:学会 Python
字典通过键来找到对应的值。
什么是字典?
字典是一组键值对:
user = {
"name": "马哥",
"age": 30,
"city": "成都",
}
可以这样理解:
"name"是键"马哥"是值- 通过键可以快速找到值
读取:
print(user["name"])
新增和修改
新增键值对:
user = {"name": "小明", "age": 18}
user["city"] = "成都"
print(user)
修改已有值:
user["age"] = 19
新增和修改用的是同一种写法。如果键不存在就是新增,键存在就是修改。
删除内容
用 pop() 删除并返回值:
user = {"name": "小明", "age": 18, "city": "成都"}
city = user.pop("city")
print(city)
print(user)
用 del 删除:
del user["age"]
清空字典:
user.clear()
安全读取 get()
直接用 [] 读取不存在的键会报错:
user = {"name": "小明"}
print(user["email"])
这会报 KeyError。
更安全的方式是 get():
print(user.get("email"))
print(user.get("email", "未填写"))
第二个参数是默认值。
判断键是否存在
user = {"name": "小明", "age": 18}
if "email" in user:
print(user["email"])
else:
print("没有填写邮箱")
in 判断的是键,不是值。
遍历字典
遍历键:
for key in user:
print(key)
遍历值:
for value in user.values():
print(value)
同时遍历键和值:
for key, value in user.items():
print(f"{key}: {value}")
最常用的是 .items()。
字典列表
实际项目里,经常会用“列表保存多个字典”。
students = [
{"name": "小明", "score": 85},
{"name": "小红", "score": 92},
{"name": "小刚", "score": 78},
]
for student in students:
print(f"{student['name']}:{student['score']}")
这是一种非常常见的数据组织方式。
了解即可:字典推导式
names = ["Alice", "Bob", "Charlie"]
name_lengths = {name: len(name) for name in names}
print(name_lengths)
输出:
{'Alice': 5, 'Bob': 3, 'Charlie': 7}
推导式后面有单独章节详细讲。
逐行拆解
再看开头的例子:
student["score"] = 92
修改学生成绩。
student["goal"] = "学会 Python"
新增学习目标。
student['name']
通过键 "name" 读取对应的值。
自己改一改
把 dict_demo.py 改成课程信息:
course = {
"title": "Python 入门",
"teacher": "马哥",
"lessons": 25,
}
course["level"] = "零基础"
course["lessons"] = 30
for key, value in course.items():
print(f"{key}: {value}")
然后继续改:
- 增加一个键
price - 用
get()读取description,默认值为“暂无简介” - 删除
price
常见错误
1. 读取不存在的键
user = {"name": "小明"}
print(user["email"])
使用 get() 更安全:
print(user.get("email", "未填写"))
2. 忘记给字符串键加引号
错误写法:
user = {name: "小明"}
正确写法:
user = {"name": "小明"}
3. 遍历时只拿到键
for item in user:
print(item)
这样拿到的是键。如果要同时拿键和值,用:
for key, value in user.items():
print(key, value)
4. 混淆列表和字典
列表用索引:
items[0]
字典用键:
user["name"]
小练习
练习 1:个人信息
创建一个字典,保存你的名字、城市、学习目标,并逐行输出。
练习 2:商品信息
创建商品字典,包含名称、单价、数量。计算并输出总价。
练习 3:学生列表
创建一个学生列表,每个学生是字典。输出所有学生姓名和成绩。
参考答案
练习 1:
profile = {
"name": "小明",
"city": "成都",
"goal": "写自动化脚本",
}
for key, value in profile.items():
print(f"{key}: {value}")
练习 2:
product = {
"name": "苹果",
"price": 3.5,
"count": 4,
}
total = product["price"] * product["count"]
print(f"{product['name']} 总价:{total} 元")
练习 3:
students = [
{"name": "小明", "score": 85},
{"name": "小红", "score": 92},
{"name": "小刚", "score": 78},
]
for student in students:
print(f"{student['name']}:{student['score']}")
小结
这一节你学会了:
- 字典用键值对保存数据
dict[key]可以读取或修改值get()可以安全读取不存在的键pop()和del可以删除键值对.items()可以同时遍历键和值
下一节我们会学习推导式与生成器。你会用更简洁的方式处理列表、字典和集合。
字典一上场,数据终于有名有姓了
字典最迷人的地方,是你不用猜第几个位置是什么,直接用键找值。学生资料、商品信息、课程配置都很适合它。马哥提醒你多用 get(),它比硬取键更温柔,不容易一言不合就 KeyError。
还没有评论,来抢沙发吧!