12.python中字典练习题

一、创建与访问字典

练习 1.1 创建简单字典并访问值

题目:

  1. 创建一个字典 book,包含如下键—值对:
    • "title""Python入门"
    • "author""张三"
    • "price"59.8
  2. 分别打印书名、作者和价格。

参考答案:

book = {
    "title": "Python入门",
    "author": "张三",
    "price": 59.8,
}

print("书名:", book["title"])
print("作者:", book["author"])
print("价格:", book["price"])

练习 1.2 使用 get() 安全访问

题目:

在上一个 book 字典的基础上:

  1. book["publisher"] 访问出版社(注意:字典中没有 publisher 这个键,思考会发生什么)。
  2. 改用 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 字典:

  1. 如果有 "author" 这个键,打印“有作者信息”。
  2. 如果没有 "publisher" 这个键,打印“没有出版社信息”。

参考答案:

book = {
    "title": "Python入门",
    "author": "张三",
    "price": 59.8,
}

if "author" in book:
    print("有作者信息")

if "publisher" not in book:
    print("没有出版社信息")

二、添加、修改、删除键—值对

练习 2.1 从空字典开始逐步添加

题目:

  1. 创建一个空字典 person
  2. 依次添加:
    • "name""小明"
    • "age"18
    • "city""北京"
  3. 打印整个字典。

参考答案:

person = {}          # 空字典
person["name"] = "小明"
person["age"] = 18
person["city"] = "北京"

print(person)
# {'name': '小明', 'age': 18, 'city': '北京'}

练习 2.2 修改已有键的值

题目:

在上一个 person 字典的基础上:

  1. 把年龄改为 20
  2. 把城市改为 "上海"
  3. 打印修改后的字典

参考答案:

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": "篮球",
}
  1. del 删除 "hobby" 这个键。
  2. 打印删除后的字典。

参考答案:

person = {
    "name": "小明",
    "age": 20,
    "city": "上海",
    "hobby": "篮球",
}

del person["hobby"]
print(person)
# {'name': '小明', 'age': 20, 'city': '上海'}

练习 2.4 使用 pop() 删除并保留值

题目:

  1. 从下面字典中使用 pop("age") 删除年龄:
person = {"name": "小明", "age": 20, "city": "上海"}
  1. 把被删除的年龄保存到变量 removed_age 中。
  2. 分别打印 removed_age 和删除后的 person

参考答案:

person = {"name": "小明", "age": 20, "city": "上海"}

removed_age = person.pop("age")
print("被删除的年龄:", removed_age)  # 被删除的年龄: 20
print("删除后的字典:", person)      # 删除后的字典: {'name': '小明', 'city': '上海'}

练习 2.5 使用 clear() 清空字典

题目:

  1. 定义 person = {"name": "小明", "age": 20}
  2. 使用 clear() 清空字典。
  3. 打印清空后的 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 字典中的列表:访问与遍历

题目:

  1. 创建一个字典 student
student = {
    "name": "小明",
    "hobbies": ["篮球", "吉他", "编程"],
}
  1. 先打印整个 hobbies 列表。
  2. 使用 for 循环遍历 hobbies 列表,逐行打印:
爱好:篮球
爱好:吉他
爱好:编程

参考答案:

student = {
    "name": "小明",
    "hobbies": ["篮球", "吉他", "编程"],
}

print(student["hobbies"])

for hobby in student["hobbies"]:
    print("爱好:", hobby)

练习 4.2 向字典中的列表添加元素

题目:

在上一个 student 字典基础上:

  1. 使用 appendhobbies 列表中添加一个新爱好 "游泳"
  2. 再次遍历并打印所有爱好。

参考答案:

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 号",
    },
}
  1. 打印用户名。
  2. 打印所在城市(city)。
  3. 打印详细地址(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 班级信息结构设计与访问

题目:

  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,
            },
        },
    ],
}
  1. 打印班级名称和班长姓名。
  2. 遍历 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 的基础上:

  1. students 中每个学生:
    • 计算总分 total = math + chinese
    • 如果 total >= 180,为该学生字典添加键 "passed": True,否则添加 "passed": False
  2. 遍历学生,再次打印每个学生信息,格式示例:
姓名:小明,总分: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}")

发表评论