今天我们学习的是字典(dict)、集合(set)两个新的数据容器。
1.Python字典(dict)
字典是一种可变容器模型,且可以存储任何类型对象,字典的每个键值( key:value)用冒号分隔,每个对之间用逗号分割,整个字典包括花括号{ }中
1.创建字典
因为dict作为Python中的关键字和内置函数,所以变量名应避免dict。需要注意的规则是在字典中键是必须是唯一的,但值则不是。值可以是任何数据类型,但键是不可变的,如字符串,数字,元组等不可变的字段作为键名。
字典的创建封可以直接通过在{ }中用键值对的表达形式key : value来给予它特征值,也可以使用它的内置dict()函数来创建字典。但是所有的元素都必须存在键。
d1 = {}#创建空字典
d2 = dict()#使用内建函数 dict()创建字典
d3 = {"name":"karen","age":23}
d4 = dict({"name":"jack","age":24})
print(d3)# 打印字典
print(len(d3))# 查看字典的数量
print(type(d3))# 查看类型
在创建字典的过程中,可能会出现键名一致的情况,而这种情况下程序并不会出错,只是会在程序运行中将后声明的值赋给这一个键。
2.访问字典里的值
和之前学过的数据容器一致,字典也是既能存也能取,而字典的取值方式与数列类似,但是数列的查询是通过查询其下标实现的,数据名后[ ]中填写的也是对应的数字,而字典因为没有直接的排序,所有字典的查询方式是通过键来访问,而通过键访问的也是键内所储存的值。
需要注意的是在查询键值的时候,键名是什么形式的就应该用什么形式输写,而不是键名为数字,但查询时将键名用双引号框选,这样查询到的只会是这个字符串的键值,而如果当这个值不存在的时候,程序就会报错,这直接说明了字典无法查询不存在的键。
3.修改字典
因为字典中各个键所对应的值是可变量,那么我们就可以修改字典,而字典也可以通过新增键值对和删除、清空键值对等进行修改。
较为特殊的是,如果对一个存在的键进行更新时,字典会直接将该对键值加入字典中。
说完了更新和删除后,就该说说删除了,这次的字典依旧是提供了del和clear()两个函数,非常容易理解,如果del 后的表达式有指定键值,则只删除该键值,如果只有一个字典名则是直接删除整个字典,而clear()就直接清空指定字典内的所有键值,但保留该字典空间。就不过多演示。
5.字典常用API
序号 | 函数及描述 |
---|---|
1 | dict.clear()删除字典内所有元素 |
2 | dict.copy()返回一个字典的浅复制 |
3 | dict.fromkeys(seq)创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | dict.get(key, default=None)返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
5 | key in dict如果键在字典dict里返回true,否则返回false |
6 | dict.items()以列表返回一个视图对象 |
7 | dict.keys()返回一个视图对象 |
8 | dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2)把字典dict2的键/值对更新到dict里 |
10 | dict.values()返回一个视图对象 |
11 | pop(key,default)删除字典 key(键)所对应的值,返回被删除的值。 |
12 | popitem()返回并删除字典中的最后一对键和值。 |
先是dict.fromkeys(seq),此方法可以快速创建字典,并统一赋值。从下图亦可以看出,统一赋值的参数value是能够为所有类型的。
接下来是.items()、.keys()和.values(),这两个的返回值都是一个列表,但是items是将键和值都输出为列表中的元素,而keys和values分别输出的是键名和键值。 需要注意的是,items()输出的是元组,而keys()和values()输出的则是列表。
其他的例如get()就是通过键名访问值,但是它比直接访问有优势的地方是当访问到不存在的键时,程序并不会报错,所以可以通过get来增加程序的通过性。
然后是字典的连接符,在列表中我们提供了直接使用+号进行连接的方式,非常快捷和方便的,但是在字典中,我们无法使用,只能够通过提供的update()函数进行更新。因为是更新,所以是直接对原字典进行修改,不输出新字典。
然后提供的两个删除函数,一个是pop(key)指定删除键所对应的值,但是会返回被删除的值,另一个popitem()则是删除字典中的最后一对键和值。
最后在提一下in这个函数,在之前的元组中也提供了这个函数,主要是用于判断某键是否在字典内。不在过多实践。
二.Python集合(set)
集合是一个无序的不重复元素序列,但是可以在进行交集、并集、差集等常见的集合操作。
1.创建集合
集合的表现方式也是{ }表示,其中的所有元素都用逗号隔开,与字典的形式不同。那么就需要考虑一个问题,当时我使用(set = {} )语句创建内存空间时,这个set的类型是什么,是集合呢还是上面讲到的字典呢? 显然,类型为字典,所以该语句创建的是字典,而不是集合。
集合的正确创建方式依然是两种,一种是直接使用大括号创建,一种是用set()函数创建。
还需要注意的是,当我们直接有大括号创建集合且集合中的值只有一个时,应该在该变量的后面加上一个逗号来表明此为集合元素。回到第一个话题,创建空集合的话也就应该使用set()这种方式来创建了。
2.添加元素
集合的常见添加方法有.add()和.update()两种,前者是进行简单的添加,而后置用于多数据的添加,且参数可以元组、列表、字典等,只需用逗号将各个元素隔开即可。
从该结果可以看出集合的特性:无序。
但是在添加时需要注意嵌套和一些其他的案例
3. 移除元素
集合中注意的三种方式分别为.remove()、.discard()、.pop()等三个函数。remove和discard的差异主要是移除后如果元素不存在是否会发生错误的问题。而pop则是对排序后的集合的左面第一个元素进行删除。
这里需要注意的是pop()的输出虽然是删除了10,但是数列是一定经过了重新排序的。
4.其他API
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
之前有过的方法就不一一重复介绍了,集合中最主要的方法是各种子集的生成。
然后是返回两个集合中不重复的元素集合。
最后是各种判断集合的关系的方法。
今天的学习,到此结束。