数据结构:字典与集合¶
在Python中,字典(dict
)和集合(set
)是两种非常有用的数据结构。它们都用于存储数据,但各自有不同的特性和用途。本章将详细介绍字典和集合的特性、创建方法以及常用操作。
1. 字典(Dictionary)¶
1.1 字典的概念¶
字典是一种可变容器模型,且可存储任意类型对象。字典的每个元素都是一个键值对(key-value pair
),其中键(key
)必须是唯一的,而值(value
)可以是任意类型的数据。字典中的元素是无序的,这意味着你不能通过索引来访问它们,而必须通过键来访问。
1.2 字典的创建¶
字典可以通过以下方式创建:
- 使用花括号
{}
直接创建 - 使用
dict()
函数创建
# 示例1:使用花括号创建字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 示例2:使用dict()函数创建字典
another_dict = dict(name='Bob', age=30, city='San Francisco')
print(another_dict) # 输出: {'name': 'Bob', 'age': 30, 'city': 'San Francisco'}
1.3 字典的常用操作¶
1.3.1 访问字典中的值¶
你可以通过键来访问字典中的值:
如果键不存在,Python会抛出 KeyError
。为了避免这种情况,可以使用 get()
方法:
print(my_dict.get('name')) # 输出: Alice
print(my_dict.get('gender', 'Unknown')) # 输出: Unknown (因为'gender'键不存在)
1.3.2 添加或修改字典中的元素¶
你可以通过赋值操作来添加或修改字典中的元素:
# 示例4:添加或修改字典中的元素
my_dict['gender'] = 'Female' # 添加新键值对
print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York', 'gender': 'Female'}
my_dict['age'] = 26 # 修改已有键的值
print(my_dict) # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York', 'gender': 'Female'}
1.3.3 删除字典中的元素¶
你可以使用 del
语句或 pop()
方法来删除字典中的元素:
# 示例5:删除字典中的元素
del my_dict['city'] # 删除键为'city'的元素
print(my_dict) # 输出: {'name': 'Alice', 'age': 26, 'gender': 'Female'}
age = my_dict.pop('age') # 删除键为'age'的元素并返回其值
print(age) # 输出: 26
print(my_dict) # 输出: {'name': 'Alice', 'gender': 'Female'}
1.3.4 遍历字典¶
你可以使用 for
循环来遍历字典中的键、值或键值对:
# 示例6:遍历字典
for key in my_dict:
print(key, my_dict[key]) # 输出: name Alice, gender Female
for value in my_dict.values():
print(value) # 输出: Alice, Female
for key, value in my_dict.items():
print(key, value) # 输出: name Alice, gender Female
2. 集合(Set)¶
2.1 集合的概念¶
集合是一个无序且不重复的元素集。集合中的元素必须是不可变类型(如整数、字符串、元组等),但集合本身是可变的。集合的主要用途是进行成员关系测试和消除重复元素。
2.2 集合的创建¶
集合可以通过以下方式创建:
- 使用花括号
{}
直接创建 - 使用
set()
函数创建
# 示例7:使用花括号创建集合
my_set = {1, 2, 3, 4, 5}
print(my_set) # 输出: {1, 2, 3, 4, 5}
# 示例8:使用set()函数创建集合
another_set = set([1, 2, 2, 3, 4, 4, 5])
print(another_set) # 输出: {1, 2, 3, 4, 5} (重复元素被自动去除)
2.3 集合的常用操作¶
2.3.1 添加元素¶
你可以使用 add()
方法向集合中添加元素:
2.3.2 删除元素¶
你可以使用 remove()
或 discard()
方法从集合中删除元素:
# 示例10:从集合中删除元素
my_set.remove(3) # 删除元素3
print(my_set) # 输出: {1, 2, 4, 5, 6}
my_set.discard(7) # 尝试删除不存在的元素7,不会抛出错误
print(my_set) # 输出: {1, 2, 4, 5, 6}
2.3.3 集合运算¶
集合支持多种数学运算,如并集、交集、差集等:
# 示例11:集合运算
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 并集
print(set1 | set2) # 输出: {1, 2, 3, 4, 5, 6}
# 交集
print(set1 & set2) # 输出: {3, 4}
# 差集
print(set1 - set2) # 输出: {1, 2}
3. 练习题¶
3.1 简单题¶
- 创建一个字典,包含你的姓名、年龄和城市,并打印出来。
- 创建一个集合,包含1到10的整数,并打印出来。
3.2 中等题¶
- 编写一个函数,接受一个字典和一个键作为参数,如果键存在于字典中,则返回对应的值,否则返回 "Key not found"。
- 编写一个函数,接受两个集合作为参数,返回它们的并集。
3.3 复杂题¶
- 编写一个函数,接受一个列表作为参数,返回一个字典,其中键是列表中的元素,值是该元素在列表中出现的次数。
- 编写一个函数,接受两个集合作为参数,返回它们的对称差集(即只存在于其中一个集合中的元素)。
4. 总结¶
- 字典 是一种键值对的数据结构,键必须是唯一的,值可以是任意类型。字典的常用操作包括访问、添加、修改、删除和遍历元素。
- 集合 是一种无序且不重复的元素集,常用于成员关系测试和去重。集合的常用操作包括添加、删除元素以及进行集合运算(如并集、交集、差集等)。
通过本章的学习,你应该能够熟练使用字典和集合来处理各种数据存储和操作任务。继续练习这些概念,以便在实际编程中灵活运用它们。