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