news 2026/4/23 19:09:15

Python数据结构(下):字典、集合及综合练习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python数据结构(下):字典、集合及综合练习

在上一篇《Python数据结构(上)》中,我们介绍了列表(list)和元组(tuple)这两种常用的数据结构。本篇将继续深入,介绍另外两种重要的内置数据结构——字典(dictionary)集合(set),并结合实际案例进行综合练习,帮助你更好地掌握它们的应用场景与操作方法。


一、字典(Dictionary)

1.1 什么是字典?

字典是 Python 中一种无序、可变、键值对(key-value pair)存储的数据结构。它用花括号{}定义,每个元素由一个“键”和一个“值”组成,通过键来快速查找对应的值。

✅ 特点:

  • 键必须是不可变类型(如字符串、数字、元组)
  • 值可以是任意类型
  • 键具有唯一性,不允许重复

1.2 创建字典

# 方法1:直接定义

student = {

"name": "张三",

"age": 20,

"major": "计算机科学"

}

# 方法2:使用 dict() 构造函数

person = dict(name="李四", age=22, city="北京")

# 方法3:从键值对列表创建

data = [("a", 1), ("b", 2)]

d = dict(data) # {'a': 1, 'b': 2}

1.3 字典的基本操作

# 访问值

print(student["name"]) # 输出:张三

# 添加或修改

student["grade"] = "大二" # 添加新键值对

student["age"] = 21 # 修改已有值

# 删除键值对

del student["major"]

# 检查键是否存在

if "name" in student:

print("存在 name 键")

# 获取所有键、值、键值对

print(student.keys()) # dict_keys(['name', 'age', 'grade'])

print(student.values()) # dict_values(['张三', 21, '大二'])

print(student.items()) # dict_items([('name', '张三'), ('age', 21), ('grade', '大二')])

1.4 遍历字典

for key in student:

print(key, ":", student[key])

# 或更推荐的方式

for key, value in student.items():

print(f"{key}: {value}")


二、集合(Set)

2.1 什么是集合?

集合是一种无序、不重复元素的容器,常用于去重和集合运算(如并集、交集等)。集合使用花括号{}set()函数创建,注意:空集合只能用set()创建,{}表示空字典。

✅ 特点:

  • 元素唯一,自动去重
  • 元素必须是不可变类型
  • 不支持索引访问

2.2 创建集合

# 方法1:使用花括号(非空时)

fruits = {"apple", "banana", "apple", "orange"}

print(fruits) # {'apple', 'banana', 'orange'} —— 自动去重

# 方法2:使用 set() 函数

numbers = set([1, 2, 2, 3, 4]) # {1, 2, 3, 4}

# 空集合

empty_set = set()

2.3 集合的基本操作

# 添加元素

fruits.add("grape")

# 删除元素

fruits.remove("banana") # 若不存在会报错

fruits.discard("kiwi") # 安全删除,不存在也不报错

# 集合运算

set_a = {1, 2, 3}

set_b = {3, 4, 5}

print(set_a | set_b) # 并集: {1, 2, 3, 4, 5}

print(set_a & set_b) # 交集: {3}

print(set_a - set_b) # 差集: {1, 2}

print(set_a ^ set_b) # 对称差集: {1, 2, 4, 5}


三、字典 vs 集合 vs 列表对比

特性列表(list)字典(dict)集合(set)
是否有序否(Python 3.7+ 保持插入顺序)
是否可变
元素是否唯一键唯一,值可重复
访问方式索引(如 list[0])键(如 dict['name'])不支持索引
典型用途存储有序数据存储键值映射去重、集合运算

四、综合练习:学生成绩管理系统

下面我们通过一个实际案例,综合运用列表、字典和集合,实现一个简单的学生成绩管理功能。

需求描述:

  1. 存储多个学生的姓名、年龄、科目成绩(数学、英语)
  2. 支持添加学生、查询平均分、统计不及格人数
  3. 统计所有出现过的科目(使用集合去重)
  4. 找出数学和英语都及格的学生名单

实现代码:

# 学生数据列表,每个学生是一个字典

students = [

{"name": "张三", "age": 20, "math": 85, "english": 78},

{"name": "李四", "age": 19, "math": 56, "english": 92},

{"name": "王五", "age": 21, "math": 73, "english": 65},

{"name": "赵六", "age": 20, "math": 90, "english": 88}

]

# 1. 添加新学生

def add_student(name, age, math, english):

students.append({

"name": name,

"age": age,

"math": math,

"english": english

})

add_student("钱七", 19, 45, 70)

# 2. 计算所有学生的平均分

def average_score(subject):

total = sum(s[subject] for s in students)

return total / len(students)

print(f"数学平均分: {average_score('math'):.2f}")

print(f"英语平均分: {average_score('english'):.2f}")

# 3. 统计不及格人数(任一科目 < 60)

fail_count = 0

for s in students:

if s["math"] < 60 or s["english"] < 60:

fail_count += 1

print(f"不及格人数: {fail_count}")

# 4. 使用集合获取所有科目(扩展性好)

subjects = set()

for s in students:

subjects.update(s.keys())

# 过滤掉非成绩字段

subjects = {s for s in subjects if s in ["math", "english"]}

print("所有科目:", subjects)

# 5. 找出两科都及格的学生

good_students = []

for s in students:

if s["math"] >= 60 and s["english"] >= 60:

good_students.append(s["name"])

print("双科及格学生:", good_students)

输出结果:

数学平均分: 76.80 英语平均分: 78.20 不及格人数: 2 所有科目: {'math', 'english'} 双科及格学生: ['张三', '王五', '赵六']

五、小结

  • 字典适用于需要通过“键”快速查找“值”的场景,如配置信息、用户资料等。
  • 集合擅长处理去重和集合运算,在数据分析、筛选中非常实用。
  • 在实际开发中,经常将列表 + 字典 + 集合组合使用,发挥各自优势。

掌握这些数据结构,不仅能提升代码效率,还能让你写出更清晰、更易维护的程序。


六、课后练习

  1. 编写一个函数,接收一个单词列表,返回每个单词中不同字母组成的集合。
  2. 使用字典统计一段文本中每个字符出现的次数。
  3. 模拟两个班级的学生名单(用集合),找出共同参加活动的学生(交集)。

💡 提示:多动手实践是掌握数据结构的最佳方式!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:31:25

具身智能(Embodied AI)逼近:机器人如何更好地理解物理世界?

1. 引言&#xff1a;从感知到交互的范式转变 当我们谈论人工智能时&#xff0c;往往会想到围棋高手AlphaGo、文本生成模型ChatGPT或者图像识别系统——这些系统在特定任务上展现出惊人能力&#xff0c;但它们对世界的理解仍停留在抽象符号层面。具身智能&#xff08;Embodied A…

作者头像 李华
网站建设 2026/4/23 12:31:48

公司组织架构调整工具 在线可视化编辑平台

随着现代企业规模的不断扩大以及业务领域的多元化发展&#xff0c;企业组织架构的调整需求日益频繁和复杂。传统的纸质或静态图表已经无法满足现代企业对动态、实时和协作化管理的需求。因此&#xff0c;在线可视化编辑平台应运而生&#xff0c;成为企业高效管理组织架构的重要…

作者头像 李华
网站建设 2026/4/22 23:00:24

组织架构图详细版 部门岗位全呈现在线绘制

在现代企业管理中&#xff0c;组织架构图作为一种重要的管理工具&#xff0c;不仅能够清晰地展示企业的层级结构&#xff0c;还能帮助员工理解各部门之间的关系和职责分工。一个设计良好的组织架构图&#xff0c;可以让新员工快速融入团队&#xff0c;让管理者更好地进行人力资…

作者头像 李华
网站建设 2026/4/23 12:31:58

【AutoGLM系统稳定性跃升300%】:背后鲜为人知的等待时间自适应算法

第一章&#xff1a;AutoGLM系统稳定性跃升300%的奥秘AutoGLM 作为新一代自动化生成语言模型平台&#xff0c;其系统稳定性的显著提升并非偶然。背后的核心机制在于动态负载均衡策略与智能异常熔断系统的深度集成&#xff0c;结合容器化部署的精细化资源调度。动态健康检查机制 …

作者头像 李华
网站建设 2026/4/23 14:43:29

大数据技术的基于Python爬虫的网络小说数据分析系统的设计与实现_4svlqv70-爬虫 可视化

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 大数据技术的基于Python爬虫的网络小说数据分析系统的设计与实现_4svlqv70-爬虫 可…

作者头像 李华
网站建设 2026/4/23 1:29:14

研究生必备7款免费AI论文工具:一键生成综述+真实文献交叉引用

如果你是正在熬夜赶Deadline的毕业生&#xff0c;是看着导师修改意见感到绝望的研究生&#xff0c;是预算有限却要为查重和润色掏空钱包的穷学生——那么&#xff0c;这篇文章就是为你准备的。 我们懂你的痛&#xff1a;开题报告无从下手&#xff0c;文献综述像大海捞针&#…

作者头像 李华