5·模块一:环境与基础入门

字典(Dictionary)与集合(Set)

dictionariessetscollections

Python 编程:从零基础到精通

模块一:环境与基础

第5课 - 字典(Dictionary)与集合(Set)

学习目标

通过本节课的学习,你将能够:

  1. 理解并创建字典,掌握通过键(Key)访问和操作值(Value)的方法。
  2. 熟悉字典的常用方法,如get(), keys(), values(), items()以及遍历字典。
  3. 理解集合作为无序、不重复元素集合的特性,并掌握其基本操作(创建、添加、删除)。
  4. 利用集合进行高效的成员关系测试和去重操作。

核心概念

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: 15
  • hobbies: ["篮球", "编程", "阅读"] 然后,打印出该学生的所有爱好(提示:如何访问列表类型的值)。

练习二(进阶):字典遍历与统计 给定一个列表 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] 请完成以下操作:

  1. list1list2 合并,去除所有重复的数字,并将结果存入一个新列表 merged_unique
  2. 找出同时存在于 list1list2 中的数字,存入列表 common。 (提示:思考如何使用集合的运算或方法来简化你的代码)

常见错误

  1. 用列表作为字典的键:字典的键必须是不可变的(可哈希的),列表是可变的,因此会报错。例如:{[1,2]: "value"} 是错误的。
  2. 混淆创建空字典和空集合{} 创建的是空字典,set() 创建的是空集合。这是一个非常经典的坑。
  3. 直接访问字典中不存在的键:使用 [] 访问不存在的键会引发 KeyError。应养成使用 .get() 方法的习惯。
  4. 忘记集合是无序的:不能通过索引(如 set[0])访问集合中的元素,因为它们没有固定的顺序。
  5. 试图修改集合中的元素:集合中的元素必须是不可变的(如数字、字符串、元组),不能包含列表、字典等可变对象。

小结

  • 字典是键值对的集合,通过唯一的键来快速存取值,非常适合表示具有属性的事物(如学生信息、商品详情)。
  • 集合是唯一元素的无序集,核心优势在于去重高效的集合运算(交、并、差、对称差),以及快速的成员关系测试。
  • 记住创建它们的区别:{'key':'value'} 是字典,{'element'} 是集合,set() 是空集合。
  • 当需要将信息与一个标识符(键)关联时,使用字典。当只关心元素是否存在或需要去除重复时,使用集合

练习编辑器

python
Loading...

继续学习

完成本课后,建议继续学习下一课「条件判断(if-elif-else)」 以巩固所学知识。