一、创建与访问字典
练习 1.1 创建简单字典并访问值
题目:
- 创建一个字典
book,包含如下键—值对:"title":"Python入门""author":"张三""price":59.8
- 分别打印书名、作者和价格。
参考答案:
book = {
"title": "Python入门",
"author": "张三",
"price": 59.8,
}
print("书名:", book["title"])
print("作者:", book["author"])
print("价格:", book["price"])
练习 1.2 使用 get() 安全访问
题目:
在上一个 book 字典的基础上:
- 用
book["publisher"]访问出版社(注意:字典中没有publisher这个键,思考会发生什么)。 - 改用
book.get("publisher", "未知出版社")访问,要求:- 不报错
- 打印出“出版社: 未知出版社”
参考答案:
book = {
"title": "Python入门",
"author": "张三",
"price": 59.8,
}
# 直接用中括号访问会 KeyError(此处注释掉,避免程序报错停止)
# print(book["publisher"])
publisher = book.get("publisher", "未知出版社")
print("出版社:", publisher) # 出版社: 未知出版社
要点:
- 访问可能不存在的键时,用
get()更安全。
练习 1.3 键的存在性判断(in / not in)
题目:
使用上一题的 book 字典:
- 如果有
"author"这个键,打印“有作者信息”。 - 如果没有
"publisher"这个键,打印“没有出版社信息”。
参考答案:
book = {
"title": "Python入门",
"author": "张三",
"price": 59.8,
}
if "author" in book:
print("有作者信息")
if "publisher" not in book:
print("没有出版社信息")
二、添加、修改、删除键—值对
练习 2.1 从空字典开始逐步添加
题目:
- 创建一个空字典
person。 - 依次添加:
"name":"小明""age":18"city":"北京"
- 打印整个字典。
参考答案:
person = {} # 空字典
person["name"] = "小明"
person["age"] = 18
person["city"] = "北京"
print(person)
# {'name': '小明', 'age': 18, 'city': '北京'}
练习 2.2 修改已有键的值
题目:
在上一个 person 字典的基础上:
- 把年龄改为
20 - 把城市改为
"上海" - 打印修改后的字典
参考答案:
person = {"name": "小明", "age": 18, "city": "北京"}
person["age"] = 20
person["city"] = "上海"
print(person)
# {'name': '小明', 'age': 20, 'city': '上海'}
练习 2.3 使用 del 删除键—值对
题目:
在下面的字典中:
person = {
"name": "小明",
"age": 20,
"city": "上海",
"hobby": "篮球",
}
- 用
del删除"hobby"这个键。 - 打印删除后的字典。
参考答案:
person = {
"name": "小明",
"age": 20,
"city": "上海",
"hobby": "篮球",
}
del person["hobby"]
print(person)
# {'name': '小明', 'age': 20, 'city': '上海'}
练习 2.4 使用 pop() 删除并保留值
题目:
- 从下面字典中使用
pop("age")删除年龄:
person = {"name": "小明", "age": 20, "city": "上海"}
- 把被删除的年龄保存到变量
removed_age中。 - 分别打印
removed_age和删除后的person。
参考答案:
person = {"name": "小明", "age": 20, "city": "上海"}
removed_age = person.pop("age")
print("被删除的年龄:", removed_age) # 被删除的年龄: 20
print("删除后的字典:", person) # 删除后的字典: {'name': '小明', 'city': '上海'}
练习 2.5 使用 clear() 清空字典
题目:
- 定义
person = {"name": "小明", "age": 20}。 - 使用
clear()清空字典。 - 打印清空后的
person。
参考答案:
person = {"name": "小明", "age": 20}
person.clear()
print(person) # {}
三、字典的遍历
练习 3.1 遍历键(keys)
题目:
给定字典:
scores = {
"math": 95,
"english": 88,
"chinese": 92,
}
使用 for 循环遍历所有的 键,并逐行打印:
科目:math
科目:english
科目:chinese
参考答案:
scores = {
"math": 95,
"english": 88,
"chinese": 92,
}
for subject in scores.keys():
print("科目:", subject)
练习 3.2 遍历值(values)
题目:
使用上面的 scores 字典,遍历所有 分数 并逐行打印:
分数:95
分数:88
分数:92
参考答案:
scores = {
"math": 95,
"english": 88,
"chinese": 92,
}
for score in scores.values():
print("分数:", score)
练习 3.3 同时遍历键和值(items)
题目:
继续使用 scores 字典,使用 for key, value in scores.items() 的方式,打印如下格式:
科目:math 分数:95
科目:english 分数:88
科目:chinese 分数:92
参考答案:
scores = {
"math": 95,
"english": 88,
"chinese": 92,
}
for subject, score in scores.items():
print("科目:", subject, "分数:", score)
四、字典中存储列表
练习 4.1 字典中的列表:访问与遍历
题目:
- 创建一个字典
student:
student = {
"name": "小明",
"hobbies": ["篮球", "吉他", "编程"],
}
- 先打印整个
hobbies列表。 - 使用
for循环遍历hobbies列表,逐行打印:
爱好:篮球
爱好:吉他
爱好:编程
参考答案:
student = {
"name": "小明",
"hobbies": ["篮球", "吉他", "编程"],
}
print(student["hobbies"])
for hobby in student["hobbies"]:
print("爱好:", hobby)
练习 4.2 向字典中的列表添加元素
题目:
在上一个 student 字典基础上:
- 使用
append向hobbies列表中添加一个新爱好"游泳"。 - 再次遍历并打印所有爱好。
参考答案:
student = {
"name": "小明",
"hobbies": ["篮球", "吉他", "编程"],
}
student["hobbies"].append("游泳")
for hobby in student["hobbies"]:
print("爱好:", hobby)
五、字典中存储字典(嵌套字典)
练习 5.1 访问嵌套字典中的值
题目:
有一个用户字典:
user = {
"username": "xiaoming",
"age": 18,
"address": {
"province": "北京",
"city": "北京市",
"detail": "中关村大街 1 号",
},
}
- 打印用户名。
- 打印所在城市(
city)。 - 打印详细地址(
detail)。
参考答案:
user = {
"username": "xiaoming",
"age": 18,
"address": {
"province": "北京",
"city": "北京市",
"detail": "中关村大街 1 号",
},
}
print("用户名:", user["username"])
print("城市:", user["address"]["city"])
print("详细地址:", user["address"]["detail"])
练习 5.2 遍历子字典
题目:
继续使用上面的 user 字典,遍历其中 address 子字典的所有键和值,打印格式类似:
province => 北京
city => 北京市
detail => 中关村大街 1 号
参考答案:
user = {
"username": "xiaoming",
"age": 18,
"address": {
"province": "北京",
"city": "北京市",
"detail": "中关村大街 1 号",
},
}
for key, value in user["address"].items():
print(key, "=>", value)
六、列表中存储字典
练习 6.1 遍历“学生列表”
题目:
有一个学生列表,每个元素是一个字典:
students = [
{"name": "小明", "age": 18},
{"name": "小红", "age": 19},
{"name": "小刚", "age": 17},
]
使用 for 循环遍历列表,逐行打印“姓名:xx,年龄:yy”。
参考答案:
students = [
{"name": "小明", "age": 18},
{"name": "小红", "age": 19},
{"name": "小刚", "age": 17},
]
for stu in students:
print("姓名:", stu["name"], "年龄:", stu["age"])
练习 6.2 条件过滤:只打印已成年学生
题目:
在上一个 students 列表基础上,只打印年龄大于等于 18 岁的学生,格式:
小明 已成年
小红 已成年
(注意:小刚 17 岁,不打印。)
参考答案:
students = [
{"name": "小明", "age": 18},
{"name": "小红", "age": 19},
{"name": "小刚", "age": 17},
]
for stu in students:
if stu["age"] >= 18:
print(stu["name"], "已成年")
七、综合小项目:班级信息管理(字典 + 列表 + 嵌套)
练习 7.1 班级信息结构设计与访问
题目:
- 创建一个
class_info字典,结构如下:
class_info = {
"name": "高一(1)班",
"monitor": "小明",
"students": [
{
"name": "小明",
"age": 16,
"scores": {
"math": 95,
"chinese": 88,
},
},
{
"name": "小红",
"age": 15,
"scores": {
"math": 90,
"chinese": 92,
},
},
],
}
- 打印班级名称和班长姓名。
- 遍历
students列表,逐个学生打印:
姓名:小明,年龄:16,数学:95,语文:88
姓名:小红,年龄:15,数学:90,语文:92
参考答案:
class_info = {
"name": "高一(1)班",
"monitor": "小明",
"students": [
{
"name": "小明",
"age": 16,
"scores": {
"math": 95,
"chinese": 88,
},
},
{
"name": "小红",
"age": 15,
"scores": {
"math": 90,
"chinese": 92,
},
},
],
}
print("班级名称:", class_info["name"])
print("班长:", class_info["monitor"])
for stu in class_info["students"]:
name = stu["name"]
age = stu["age"]
math = stu["scores"]["math"]
chinese = stu["scores"]["chinese"]
print(f"姓名:{name},年龄:{age},数学:{math},语文:{chinese}")
练习 7.2 为每个学生添加一个新键“是否及格”
题目(进阶,可选):
在上一个 class_info 的基础上:
- 对
students中每个学生:- 计算总分
total = math + chinese - 如果
total >= 180,为该学生字典添加键"passed": True,否则添加"passed": False
- 计算总分
- 遍历学生,再次打印每个学生信息,格式示例:
姓名:小明,总分:183,及格:True
姓名:小红,总分:182,及格:True
参考答案:
class_info = {
"name": "高一(1)班",
"monitor": "小明",
"students": [
{
"name": "小明",
"age": 16,
"scores": {
"math": 95,
"chinese": 88,
},
},
{
"name": "小红",
"age": 15,
"scores": {
"math": 90,
"chinese": 92,
},
},
],
}
for stu in class_info["students"]:
math = stu["scores"]["math"]
chinese = stu["scores"]["chinese"]
total = math + chinese
if total >= 180:
stu["passed"] = True
else:
stu["passed"] = False
for stu in class_info["students"]:
name = stu["name"]
math = stu["scores"]["math"]
chinese = stu["scores"]["chinese"]
total = math + chinese
passed = stu["passed"]
print(f"姓名:{name},总分:{total},及格:{passed}")