第四章 · 数据结构

字典

本节目标

学完这一节,你会知道:

  1. 字典是什么,为什么要用键值对保存数据
  2. 如何读取、新增、修改、删除字典内容
  3. 如何用 get() 安全读取
  4. 如何遍历字典的键和值
  5. 如何用字典保存一条学生资料

列表适合保存一组同类数据,字典适合保存“一个对象的多项信息”。

先跑一个例子

新建文件 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}")

然后继续改:

  1. 增加一个键 price
  2. get() 读取 description,默认值为“暂无简介”
  3. 删除 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']}")

小结

这一节你学会了:

  1. 字典用键值对保存数据
  2. dict[key] 可以读取或修改值
  3. get() 可以安全读取不存在的键
  4. pop()del 可以删除键值对
  5. .items() 可以同时遍历键和值

下一节我们会学习推导式与生成器。你会用更简洁的方式处理列表、字典和集合。

字典一上场,数据终于有名有姓了

字典最迷人的地方,是你不用猜第几个位置是什么,直接用键找值。学生资料、商品信息、课程配置都很适合它。马哥提醒你多用 get(),它比硬取键更温柔,不容易一言不合就 KeyError。

讨论 (0)

还没有评论,来抢沙发吧!