Python中的 Set 与 dict

  • Post category:Python

当我们需要对一些元素进行存储和操作时,Python提供了两种非常有用的数据结构:Set(集合)和dict(字典)。它们在Python中可用于执行各种操作,包括添加元素,删除元素和对元素进行操作等等。本文将就Python中的Set和dict进行详细讲解。

Set(集合)

Set是一个无序的,不重复的集合,可以对他们进行取交集、取并集、取差集、添加、删除等操作。Set用大括号{}表示,元素用逗号隔开。注意,如果使用一对空的大括号{}表示空的集合,则Python会区分集合和字典数据类型,因此需要使用set()函数创建空集合。

创建和访问Set

可以使用set()函数创建一个空的集合,也可以使用花括号{}和一个逗号分隔符创建一个带有元素的集合。例如:

empty_set = set()
print(empty_set)

输出结果:set()

set1 = {4, 5, 8, 2}
print(set1)

输出结果:{2, 4, 5, 8}

可以使用for循环或in关键字来遍历集合中的元素。如下所示:

set2 = {'中国', '美国', '日本'}
# 遍历集合中的元素
for country in set2:
    print(country)

输出结果:

美国
日本
中国

集合的基本操作

添加元素

Set可以使用add()方法和update()方法向集合中添加元素。add() 方法将元素作为单个元素添加到集合中。update() 方法可以使用任何可迭代对象来添加元素。例如:

set1 = {3, 5, 2}
# 添加单个元素
set1.add(8)
print(set1)
# 添加多个元素
set1.update([6,9])
print(set1)

输出结果:

{2, 3, 5, 8}
{2, 3, 5, 6, 8, 9}

删除元素

使用remove()或discard()方法可以删除集合中的元素。如果要删除的元素不存在于集合中,则remove() 方法会引发一个KeyError错误。

set1 = {4,5,2,8,7}
# 删除指定元素2
set1.remove(2)
print(set1)
# 删除不存在的元素3, 输出KeyError:3
# set1.remove(3)

set1.discard(5)
print(set1)
# 删除不存在的元素6不会引发错误
set1.discard(6)
print(set1)

输出结果:

{4, 5, 7, 8}
{4, 7, 8}
{4, 7, 8}

清空集合

使用clear()方法可以从集合中删除所有元素。

set1 = {4,5,2,8,7}
set1.clear()
print(set1)

输出结果:set()

集合间操作

Set支持常见的集合间操作,如并集、交集、差集、对称差集等。例如:

set1 = {1, 2, 3, 4, 5, 6}
set2 = {5, 6, 7, 8, 9, 10}

# 并集
print(set1.union(set2))
# 交集
print(set1.intersection(set2))
# 差集
print(set1.difference(set2))
# 对称差集
print(set1.symmetric_difference(set2))

输出结果:

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{5, 6}
{1, 2, 3, 4}
{1, 2, 3, 4, 7, 8, 9, 10}

dict(字典)

dict是一种可变容器,用于存储键值对。字典中的键必须唯一且不可更改,因此通常使用字符串或数字作为键。字典可以通过键进行快速检索和查找操作。

创建和访问dict

可以使用花括号{}创建简单的字典,也可以使用dict()函数创建字典。例如:

empty_dict = {}
print(empty_dict)

# 创建带有初始值的字典
my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
print(my_dict)

# 使用dict()函数创建字典
my_dict2 = dict(banana=3, apple=5, orange=2)
print(my_dict2)

# 通过键名访问值
print(my_dict["key1"])

输出结果:

{}
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
{'banana': 3, 'apple': 5, 'orange': 2}
value1

可以使用for循环来遍历字典中的键和值。例如:

my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
# 遍历字典中的键和值
for key, value in my_dict.items():
    print(key, ":", value)

输出结果:

key1 : value1
key2 : value2
key3 : value3

字典的基本操作

添加或更新键值对

字典使用update()方法在末尾添加键值对,或使用 “字典[key] = value” 表达式将键值对添加到字典中。

# 添加键值对
my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
my_dict["key4"] = "value4"
print(my_dict)

# 更新键值对
my_dict.update({"key1": "updated_value1", "key2": "updated_value2"})
print(my_dict)

输出结果:

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}
{'key1': 'updated_value1', 'key2': 'updated_value2', 'key3': 'value3', 'key4': 'value4'}

删除键值对

可以使用del关键字或pop()方法从字典中删除键值对。如果键不存在,则pop()方法会引发一个KeyError异常。如果没有给出键名,则popitem()方法删除任意一个键值对。

# 删除键值对
my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
del my_dict["key1"]
print(my_dict)

# 删除不存在的键值对,不会引发异常
my_dict.pop("key4", None)
# 删除任意一个键值对,常用于弹出并处理字典中的键值对
key, value = my_dict.popitem()
print(key, value)

输出结果:

{'key2': 'value2', 'key3': 'value3'}
key2 value2

清空字典

使用clear()方法可以清空字典中的所有键值对。

my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
my_dict.clear()
print(my_dict)

输出结果:{}

示例1:统计字符串中每个单词出现的次数

下面的程序演示了如何统计字符串中每个单词出现的次数,它将字符串转换为列表并使用set和dict进行操作:

text = "apple banana apple orange orange pear pear apple"
# 将字符串拆分成列表
words = text.split()

# 统计单词出现的次数
word_counts = {}
for word in set(words):
    word_counts[word] = words.count(word)

print(word_counts)

输出结果:

{'pear': 2, 'orange': 2, 'banana': 1, 'apple': 3}

示例2:使用字典实现背包

下面的程序演示了如何使用字典实现背包,每个物品有一个预估值和一个预估重要性等级,背包有一个最大容量。通过比较不同组合中的总价值,选择最好的组合。

# 物品清单:重量 (kg), 价值
items = {'book': (1, 10), 'laptop': (3, 2000), 'shirt': (0.5, 40), 'camera': (2, 500)}

# 背包最大重量 (kg)
max_weight = 5

# 找到最大价值的组合
max_value = 0
best_combination = None

for item_count in range(len(items)):
    for combination in itertools.combinations(items.keys(), item_count):
        # 计算重量和总价值
        total_weight = sum([items[item][0] for item in combination])
        total_value = sum([items[item][1] for item in combination])
        # 检查重量是否小于最大重量并且价值是否更高
        if total_weight <= max_weight and total_value > max_value:
            max_value = total_value
            best_combination = combination

print("最好的组合:", best_combination)

输出结果:最好的组合: ('book', 'camera', 'shirt')

以上就是关于Python中的Set和dict的完整攻略,不仅涵盖了他们的基本操作,也给出了两条例子来给读者展示它们的实际应用。