【Python入门系列】第7讲:Python的内置容器全面详解(2026最新版)

恭喜你!学完前6讲,你已经掌握了Python的“骨架”和“基本序列”。
从这一讲开始,我们进入 Python四大内置容器 的核心部分:

这四大容器几乎能解决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. 本讲练习(建议立刻动手)

  1. 创建一个字典,记录5个你喜欢的电影(电影名 → 评分),然后遍历打印。
  2. 给定列表 [1, 2, 2, 3, 4, 4, 5, 6, 6],用集合去重后再转回列表。
  3. 用字典推导式生成 {1:1, 2:4, 3:9, ..., 10:100}(平方字典)。
  4. 写一个程序:输入一句话,统计每个单词出现的次数(提示:用 split() + 字典计数)。

把你的练习代码贴出来,我会帮你逐行检查并给出优化建议!


下一讲预告
Python入门第8讲:函数(Function)全面详解
(包括我们之前单独讲过的闭包、装饰器基础等)

准备好了吗?
回复 “下一讲” 我们继续前进!
或者对字典、集合的任何用法有疑问(比如defaultdict、frozenset等进阶内容),现在就问我!

四大容器学完后,你的Python数据处理能力已经达到入门中级水平了!继续保持,你进步飞快!🐍✨

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐