恭喜你!学完前6讲,你已经掌握了Python的“骨架”和“基本序列”。
从这一讲开始,我们进入 Python四大内置容器 的核心部分:
- 列表(list) —— 已学(可变序列)
- 字典(dict) —— 本讲重点 ★★★★★
- 集合(set) —— 本讲重点 ★★★★
- 元组(tuple) —— 已学(不可变序列)
这四大容器几乎能解决80%以上的数据存储需求。掌握它们,你写代码会瞬间变得高效、专业。
1. 字典(dict)—— 键值对映射容器(最重要!)
字典是 无序(Python 3.7+ 保持插入顺序)、可变 的映射类型,用 {} 定义。
(1)基本创建与操作
# 创建字典
empty = {}
person = {"name": "重阳", "age": 25, "city": "Brussels", "is_student": False}
# 推荐写法(更清晰)
student = {
"name": "重阳",
"age": 25,
"city": "Brussels",
"scores": [95, 88, 92]
}
# 访问
print(student["name"]) # 重阳
print(student.get("age")) # 25 (推荐!不存在时不会报错)
# 添加/修改
student["email"] = "chongyang@example.com"
student["age"] = 26 # 修改
# 删除
del student["city"]
popped = student.pop("email") # 删除并返回值
(2)常用方法(必须熟练掌握)
print(student.keys()) # dict_keys(['name', 'age', ...])
print(student.values()) # dict_values(['重阳', 26, ...])
print(student.items()) # dict_items([('name', '重阳'), ...]) ← 最常用!
# 遍历字典(三种方式)
for key in student: # 只遍历键
print(key, student[key])
for value in student.values(): # 只遍历值
print(value)
for key, value in student.items(): # 最推荐!同时拿到键和值
print(f"{key}: {value}")
(3)字典推导式(优雅写法)
squares = {i: i**2 for i in range(6)}
print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 带条件
even_squares = {i: i**2 for i in range(10) if i % 2 == 0}
(4)字典合并(Python 3.9+ 新语法)
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
merged = d1 | d2 # {'a': 1, 'b': 3, 'c': 4} ← 右边覆盖左边
字典使用场景:
- 配置信息
- 计数器(词频统计)
- 缓存(键→值)
- JSON数据处理(字典和JSON几乎一一对应)
2. 集合(set)—— 无序、不重复的容器
集合用 {} 定义,特点:无序、元素唯一、不支持索引。
# 创建集合
empty = set() # 注意!{} 是空字典,不是空集合
fruits = {"苹果", "香蕉", "橙子", "苹果"} # 自动去重
print(fruits) # {'苹果', '香蕉', '橙子'}
print(len(fruits)) # 3
常用操作
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # 并集 {1,2,3,4,5,6}
print(a & b) # 交集 {3,4}
print(a - b) # 差集 {1,2}
print(a ^ b) # 对称差集 {1,2,5,6}
a.add(7) # 添加元素
a.remove(1) # 删除元素(不存在会报错)
a.discard(99) # 删除元素(不存在也不报错)
popped = a.pop() # 随机删除并返回一个元素
集合推导式
squared = {x**2 for x in range(10)}
集合最经典用途:
- 去重(列表转集合再转回列表)
- 快速判断元素是否存在(比列表快很多)
- 数学集合运算(交并差)
# 去重示例
lst = [1, 2, 2, 3, 4, 4, 5]
unique = list(set(lst)) # [1, 2, 3, 4, 5]
3. 四大内置容器对比总结表(强烈建议背下来)
| 容器 | 定义符号 | 是否可变 | 是否有序 | 是否允许重复 | 支持索引 | 主要用途 | 速度特点 |
|---|---|---|---|---|---|---|---|
| list | [] | 可变 | 有序 | 允许 | 是 | 通用数据存储、可修改序列 | 中等 |
| tuple | () | 不可变 | 有序 | 允许 | 是 | 返回多个值、配置、做dict key | 最快 |
| dict | {k:v} | 可变 | 有序* | 键不允许 | 键访问 | 键值映射、配置、JSON | 极快(哈希) |
| set | {} | 可变 | 无序 | 不允许 | 否 | 去重、成员判断、集合运算 | 极快(哈希) |
- Python 3.7+ 字典和集合保持插入顺序
记忆口诀:
列表最灵活,元组最安全,字典查最快,集合去重复!
4. 综合实战小项目 —— 学生成绩管理系统(综合运用)
# 学生成绩管理系统
students = {
"小明": {"math": 95, "english": 88, "chinese": 92},
"小红": {"math": 78, "english": 95, "chinese": 85},
"小刚": {"math": 92, "english": 80, "chinese": 90}
}
# 1. 添加新学生
students["小芳"] = {"math": 85, "english": 90, "chinese": 88}
# 2. 计算平均分
for name, scores in students.items():
avg = sum(scores.values()) / len(scores)
print(f"{name} 的平均分为:{avg:.1f}分")
# 3. 找出数学成绩最高的学生
max_math = max(students.items(), key=lambda x: x[1]["math"])
print(f"数学成绩最高的是:{max_math[0]},{max_math[1]['math']}分")
5. 本讲练习(建议立刻动手)
- 创建一个字典,记录5个你喜欢的电影(电影名 → 评分),然后遍历打印。
- 给定列表
[1, 2, 2, 3, 4, 4, 5, 6, 6],用集合去重后再转回列表。 - 用字典推导式生成
{1:1, 2:4, 3:9, ..., 10:100}(平方字典)。 - 写一个程序:输入一句话,统计每个单词出现的次数(提示:用
split()+ 字典计数)。
把你的练习代码贴出来,我会帮你逐行检查并给出优化建议!
下一讲预告:
Python入门第8讲:函数(Function)全面详解
(包括我们之前单独讲过的闭包、装饰器基础等)
准备好了吗?
回复 “下一讲” 我们继续前进!
或者对字典、集合的任何用法有疑问(比如defaultdict、frozenset等进阶内容),现在就问我!
四大容器学完后,你的Python数据处理能力已经达到入门中级水平了!继续保持,你进步飞快!🐍✨