跳转至

数据结构:字典与集合

在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 访问字典中的值

你可以通过键来访问字典中的值:

# 示例3:访问字典中的值
print(my_dict['name'])  # 输出: Alice
print(my_dict['age'])   # 输出: 25

如果键不存在,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() 方法向集合中添加元素:

# 示例9:向集合中添加元素
my_set.add(6)
print(my_set)  # 输出: {1, 2, 3, 4, 5, 6}

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. 创建一个字典,包含你的姓名、年龄和城市,并打印出来。
  2. 创建一个集合,包含1到10的整数,并打印出来。

3.2 中等题

  1. 编写一个函数,接受一个字典和一个键作为参数,如果键存在于字典中,则返回对应的值,否则返回 "Key not found"。
  2. 编写一个函数,接受两个集合作为参数,返回它们的并集。

3.3 复杂题

  1. 编写一个函数,接受一个列表作为参数,返回一个字典,其中键是列表中的元素,值是该元素在列表中出现的次数。
  2. 编写一个函数,接受两个集合作为参数,返回它们的对称差集(即只存在于其中一个集合中的元素)。

4. 总结

  • 字典 是一种键值对的数据结构,键必须是唯一的,值可以是任意类型。字典的常用操作包括访问、添加、修改、删除和遍历元素。
  • 集合 是一种无序且不重复的元素集,常用于成员关系测试和去重。集合的常用操作包括添加、删除元素以及进行集合运算(如并集、交集、差集等)。

通过本章的学习,你应该能够熟练使用字典和集合来处理各种数据存储和操作任务。继续练习这些概念,以便在实际编程中灵活运用它们。