Python 中的集合和字典

  • Post category:Python

Python中的集合和字典都属于可变容器类型,它们的主要区别在于:字典是由键-值对组成的,而集合只包含唯一的元素。

集合

集合可以通过以下方式定义:

set1 = {1, 2, 3, 4} # 将一组元素用大括号包括起来
set2 = set([1, 2, 3, 4]) # 使用set函数将一个列表或元组转化为集合

注意,如果要定义空集合,需要使用set(),而不能使用{},因为{}是用来定义空字典的。

下面是集合的一些基本操作:

增加元素

set1.add(5) # 增加一个元素5
set1.update({5, 6, 7}) # 增加多个元素

删除元素

set1.remove(5) # 删除元素5,如果元素不存在会抛出KeyError异常
set1.discard(5) # 删除元素5,相比remove,如果元素不存在则不会抛出异常
set1.pop() # 随机删除一个元素,并返回该元素
set1.clear() # 删除所有元素

集合运算

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

set1.union(set2) # 并集:{1, 2, 3, 4, 5, 6}
set1.intersection(set2) # 交集:{3, 4}
set1.difference(set2) # 差集:{1, 2}
set1.symmetric_difference(set2) # 对称差集:{1, 2, 5, 6}

此外,集合还有其他常见操作,比如长度、成员关系等,这里不赘述。

字典

字典可以通过以下方式定义:

dict1 = {'name': 'Tom', 'age': 18} # 将一组键值对用大括号包括起来
dict2 = dict(zip(['name', 'age'], ['Tom', 18])) # 使用zip将两个列表组合成键值对,并使用dict转化为字典

下面是字典的一些基本操作:

增加或修改元素

dict1['gender'] = 'male' # 增加一个键值对,如果键已经存在,则修改该键对应的值
dict1.update({'gender': 'male', 'height': 175}) # 增加或修改多个键值对

删除元素

del dict1['gender'] # 删除键为'gender'的元素,如果元素不存在会抛出KeyError异常
dict1.pop('gender') # 删除键为'gender'的元素,相比del,如果元素不存在则不会抛出异常
dict1.popitem() # 随机删除一个键值对,并返回该键值对
dict1.clear() # 删除所有元素

字典信息获取

dict1.keys() # 返回所有键的列表
dict1.values() # 返回所有值的列表
dict1.items() # 返回所有键值对的列表
dict1.get('name') # 获取键为'name'的值,如果键不存在则返回None
dict1.get('name', 'No Name') # 获取键为'name'的值,如果键不存在则返回默认值'No Name'

字典遍历

for key in dict1.keys():
    print(key, end=' ')

for value in dict1.values():
    print(value, end=' ')

for key, value in dict1.items():
    print(key, value, end=' ')

下面是一个示例,将输入字符串中的单词出现次数统计到字典中:

from collections import defaultdict

s = "I like Python programming. Python is easy to learn. Python is powerful."

word_count = defaultdict(int) # 定义默认值为0的dict
for word in s.lower().split():
    word_count[word] += 1

for word, count in word_count.items():
    print(word, count)

输出:

i 1
like 1
python 3
programming. 1
is 2
easy 1
to 1
learn. 1
powerful. 1