上一讲提到的列表是有序的可变序列,而这次要提到的字典和集合属于无序的可变列表。
1.字典
字典的创建
字典由“键-值“对组成,在python中,通过如下命令创建一个空字典
# 方法1,使用花括号
a_dict = {}
# 方法2,使用dict()函数
b_dict = dict()
# 查看变量类型
print(type(a_dict), type(b_dict)) # 输出<class 'dict'> <class 'dict'>
在字典中,元素的“值”是以“键”来查询的,这也就是所谓“键:值”,在字典中需要注意:
1. 键必须是唯一的,而不同“键”对应的“值”则可以相同。
2. 键必须是不可变数据类型,值的数据类型不做要求。
例如,创建出一个包含两个键值对的字典如下:
c_dict = {'mary': 'cat', 'jacky': 'dog'}
下面讲一下字典的增删改查操作
增
要想增加字典中的元素,只需指明需要添加的键和值。如:
a_dict['mary'] = 'cat'
a_dict['jack'] = 'dog'
print(a_dict) # 输出{'mary': 'cat', 'jack': 'dog'}
删
同样,想要删除字典中的元素,可以使用del,例如
del a_dict['mary']
改
修改字典元素,需要指明修改的是哪个键对应的值,进行赋值操作即可覆盖原值获得新的键值对映射关系。
# 'jack'对应的值从'dog'修改为'cat'
a_dict['jack'] = 'cat'
查
可以使用 in, not in来查询某个元素是否在字典中,需要指明的是,既可以查询键是否在字典中,也可以查询值是否在字典中,但要分别使用到keys()方法和values()方法获取到字典的键、值。例如:
# 查询'jack'是否存在于字典的键中
if 'jack' in a_dict.keys():
print('yes')
# 查询'dog'是否存在于字典的值中
if 'dog' in a_dict.values():
print('of course yes')
对字典的理解
发现没有,在字典中“键”的地位其实类似于列表中的索引,通过访问“键”可以取到值,就像访问索引后就能得到列表的值一样。
字典和列表不同指出在于,实现数据结构的底层逻辑不一样,字典是典型的以空间换取时间的数据结构,即字典占用更多的空间,但访问速度很快,字典其实就是一种“散列表”。当然,这些是进阶的内容,此处仅作延伸帮助理解。
遍历字典
与列表相同,字典是可迭代的数据类型,能够与for循环结合使用。
例如:
# region 遍历字典
a_dict = {'mary': 'cat', 'jacky': 'dog'}
for each_key in a_dict.keys():
print(each_key)
for each_value in a_dict.values():
print(each_value)
for each_key, each_value in a_dict.items():
print(each_key, each_value)
# endregion
2. 集合
跟字典相比,集合没有字典中“键”的概念,是数学教材中“集合”的概念相同
创建一个空集合,使用set()函数
例如:
a_set = set()
集合的增删改查操作
增
集合使用add()方法增加元素。例如:
# 创建一个包含几个值的集合
b_set = {1, 2, 3, 4}
b_set.add(5)
print(b_set)
这里需要注意,非空集合(注意是非空,空集合只能用set()函数)也可以用花括号来创建,但是与字典相比,没有了键值对的映射关系。
删
删除集合中的某个元素,可以使用remove()或者discard()方法,例如
b_set.remove(5)
b_set.discard(4)
print(b_set) # 输出{1, 2, 3}
改
由于集合并不能指明某个固定的元素,因此是无法实现修改某个元素这种操作的
查
与之前的数据类型一样,可以用in,not in判断元素是否出现在集合中。
集合间的操作
特别地,集合是可以实现求交集,并集,差集的操作的。例如
# region 集合间的操作
c_set = {1, 2, 3, 4, 5}
d_set = {1, 3, 5, 7, 9}
# 求交集
inter_set = c_set & d_set
# 求并集
union_set = c_set | d_set
# 求差集,此处的例子是求c_set中与d_set中不同的所有元素
diff_set = c_set - d_set
print(inter_set, union_set, diff_set)
# endregion