Python 编程:从零基础到精通
模块一:环境与基础
第5课 - 字典(Dictionary)与集合(Set)
学习目标
通过本节课的学习,你将能够:
- 理解并创建字典,掌握通过键(Key)访问和操作值(Value)的方法。
- 熟悉字典的常用方法,如
get(),keys(),values(),items()以及遍历字典。 - 理解集合作为无序、不重复元素集合的特性,并掌握其基本操作(创建、添加、删除)。
- 利用集合进行高效的成员关系测试和去重操作。
核心概念
1. 字典(Dictionary):像一本通讯录 想象一本通讯录:左边是姓名,右边是电话号码。姓名是唯一的,我们通过姓名快速找到对应的号码。在Python中,字典就是这样的结构,它存储的是键值对(Key-Value Pair)。
- 键(Key):就像通讯录里的姓名,必须是唯一的(不能有重复),并且是不可变的数据类型(如字符串、数字、元组)。
- 值(Value):就像电话号码,可以是任何数据类型,并且可以重复。
- 花括号
{}:用来定义一个字典。
2. 集合(Set):像一个班级名单 想象一下班级花名册,它的特点是:没有顺序(谁先谁后不重要),并且每个人名只出现一次(自动去重)。集合就是这样一个无序的、元素不重复的容器。
- 特性:主要用于成员关系测试(判断某个元素是否在集合中)和消除重复元素。
- 花括号
{}或set():创建集合。但注意,创建空集合必须用set(),因为{}创建的是一个空字典。 - 集合中的元素也必须是不可变的。
代码示例
# =========== 字典 (Dictionary) ===========
# 1. 创建字典
student_score = {'Alice': 95, 'Bob': 82, 'Charlie': 88}
# 注意:键'Alice','Bob','Charlie'是字符串类型,且唯一。
# 2. 访问字典中的值:通过键来获取
print("Alice的成绩是:", student_score['Alice']) # 输出: 95
# 3. 修改和添加元素
student_score['Bob'] = 90 # 修改Bob的成绩
student_score['David'] = 92 # 添加一个新的键值对
print("更新后的字典:", student_score)
# 4. 删除元素
del student_score['Charlie'] # 删除Charlie
print("删除Charlie后:", student_score)
# 5. 常用方法
print("所有学生:", student_score.keys()) # 获取所有键
print("所有成绩:", student_score.values()) # 获取所有值
print("所有条目:", student_score.items()) # 获取所有键值对(元组列表)
# 安全的访问方式:使用 get() 方法,当键不存在时不会报错,而是返回默认值(如None或自定义值)
print("Eve的成绩:", student_score.get('Eve')) # 输出: None
print("Eve的成绩(默认0):", student_score.get('Eve', 0)) # 输出: 0
# 6. 遍历字典
print("\n遍历字典:")
for name, score in student_score.items():
print(f"{name}的成绩是{score}分")
# =========== 集合 (Set) ===========
# 1. 创建集合
# 注意:直接用{}创建,如果里面是键值对,就是字典;如果只有元素,就是集合
my_list = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(my_list) # 从列表创建集合,自动去重
print("\n去重后的集合:", unique_numbers) # 输出可能是 {1, 2, 3, 4, 5}(顺序不保证)
# 2. 集合的添加和删除
unique_numbers.add(6) # 添加元素6
print("添加6后:", unique_numbers)
unique_numbers.remove(3) # 删除元素3,如果元素不存在会报错
print("删除3后:", unique_numbers)
unique_numbers.discard(10) # 删除元素10,如果元素不存在也不会报错(安全删除)
print("discard 10后:", unique_numbers)
# 3. 集合运算(非常强大)
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}
print("\n集合A:", set_a)
print("集合B:", set_b)
print("交集 (A & B):", set_a & set_b) # {3, 4}
print("并集 (A | B):", set_a | set_b) # {1, 2, 3, 4, 5, 6}
print("差集 (A - B):", set_a - set_b) # {1, 2} 属于A但不属于B
print("对称差集 (A ^ B):", set_a ^ set_b) # {1, 2, 5, 6} 不同时属于A和B的元素
# 4. 成员关系测试(速度极快)
print("\n判断元素是否存在:")
print("1 在集合A中吗?", 1 in set_a) # True
print("5 在集合A中吗?", 5 in set_a) # False
实践练习
练习一(基础):创建一个学生信息字典
创建一个字典 student,包含以下键值对:
name: "小明"age: 15hobbies: ["篮球", "编程", "阅读"] 然后,打印出该学生的所有爱好(提示:如何访问列表类型的值)。
练习二(进阶):字典遍历与统计
给定一个列表 words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']。
编写代码,创建一个字典 word_count,用于统计每个单词出现的次数。
预期输出:{'apple': 3, 'banana': 2, 'orange': 1}
(提示:遍历列表,以单词为键,出现次数为值)
练习三(应用):利用集合去重
给定两个列表:
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
请完成以下操作:
- 将
list1和list2合并,去除所有重复的数字,并将结果存入一个新列表merged_unique。 - 找出同时存在于
list1和list2中的数字,存入列表common。 (提示:思考如何使用集合的运算或方法来简化你的代码)
常见错误
- 用列表作为字典的键:字典的键必须是不可变的(可哈希的),列表是可变的,因此会报错。例如:
{[1,2]: "value"}是错误的。 - 混淆创建空字典和空集合:
{}创建的是空字典,set()创建的是空集合。这是一个非常经典的坑。 - 直接访问字典中不存在的键:使用
[]访问不存在的键会引发KeyError。应养成使用.get()方法的习惯。 - 忘记集合是无序的:不能通过索引(如
set[0])访问集合中的元素,因为它们没有固定的顺序。 - 试图修改集合中的元素:集合中的元素必须是不可变的(如数字、字符串、元组),不能包含列表、字典等可变对象。
小结
- 字典是键值对的集合,通过唯一的键来快速存取值,非常适合表示具有属性的事物(如学生信息、商品详情)。
- 集合是唯一元素的无序集,核心优势在于去重和高效的集合运算(交、并、差、对称差),以及快速的成员关系测试。
- 记住创建它们的区别:
{'key':'value'}是字典,{'element'}是集合,set()是空集合。 - 当需要将信息与一个标识符(键)关联时,使用字典。当只关心元素是否存在或需要去除重复时,使用集合。
练习编辑器
python
Loading...