第四次 字典与集合
其中,字典这种序列结构就像电话通讯录,可以将联系人姓名和电话号码关联起来,在需要时可以直接通过姓名找到对应的电话;而集合就像是收集了很多表情的表情包,里面的所有表情都是唯一的。
字典
字典(dictionary)和列表类似,也是可变序列,不过与列表不同,它是无序的可变序列,保存的内容是以“键-值对”的形式存放的。
字典的主要特征如下。
通过键而不是通过索引来读取字典有时也称为关联数组或者散列(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
字典是任意对象的无序集合
字典是无序的,各项是从左到右随机排序的,即保存在字典中的项没有特定的顺序。这样可以提高查找顺序。
字典是可变的,并且可以任意嵌套
字典可以在原处增长或者缩短(无须生成一份拷贝),并且它支持任意深度的嵌套(即它的值可以是列表或者其他的字典)。
字典中的键必须唯一
不允许同一个键出现两次,如果出现两次,则后一个值会被记住。
字典中的键必须不可变
字典中的键是不可变的,所以可以使用数字、字符串或者元组,但不能使用列表。
字典的创建和删除
定义字典时,每个元素都包含两个部分——“键”和“值”,并且在“键”和“值”之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素放在一个大括号“{}”中。语法格式如下:
dictionary = {'key1':'value1', 'key2':'value2', ..., 'keyn':'valuen',}
dictionary:表示字典名称;
key1, key2, …, keyn:表示元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组;
value1, value2, …, valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
同列表和元组一样,也可以创建空字典。在Python中,可以使用下面两种方法创建空字典。
dictionary = {}'''或者'''
dictionary = dict()
列
某大学的寝室里住着4位清秀可人的美女,她们的名字保存在一个列表中,另外,她们每个人的星座对应着保存在另一个列表中。
根据名字和星座创建一个字典。 (实例位置:资源包\TM\sl\06\01)
定义两个包括4个元素的列表,再应用dict()函数和zip()函数将前两个列表转换为对应的字典,并且输出该字典,代码如下:
通过给定的“键-值对”创建字典
dictionary = dict(key1=value1,key2=value2,...,keyn=valuen)
dictionary:表示字典名称; key1, key2, …,
keyn:表示元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组; value1, value2, …,
valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
访问字典
在Python中,如果想将字典的内容输出也比较简单,可以直接使用print()函数。
print(dictionary)
在使用字典时,很少直接输出它的内容。一般需要根据指定的键得到相应的结果。
添加、修改和删除字典元素
由于字典是可变序列,所以可以随时在其中添加“键-值对”,这和列表类似。向字典中添加元素的语法格式如下:
dictionary[key] = value
参数说明如下: dictionary:表示字典名称; key:表示要添加元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组;
value:表示元素的值,可以是任何数据类型,不是必须唯一。
当字典中的某个元素不需要时,可以使用del命令将其删除。
当删除一个不存在的键时,将抛出如下图所示的异常。
字典推导式
使用字典推导式可以快速生成一个字典
生成的字典为: {1: 21, 2: 85, 3: 11, 4: 65}
集合
Python中的集合(set)与数学中的集合概念类似,也是用于保存不重复的元素。它有可变集合(set)和不可变集合(frozenset)两种。其中,本节所要介绍的set集合是无序可变序列,而另一种在本书中不做介绍。在形式上,集合的所有元素都放在一对大括号“{}”中,两个相邻元素间使用逗号“,”分隔。集合最好的应用就是去重,因为集合中的每个元素都是唯一的。
在数学中,集合的定义是把一些能够确定的不同的对象看成一个整体,而这个整体就是由这些对象的全体构成的集合。集合通常用大括号“{}”或者大写的拉丁字母表示。
集合最常用的操作就是创建集合,以及集合的添加、删除、交集、并集和差集等运算,下面分别进行介绍。
创建集合
在Python中提供了两种创建集合的方法,一种是直接使用“{}”创建;另一种是通过set()函数将列表、元组等可迭代对象转换为集合。
直接使用“{}”创建
setname = {element 1,element 2,element 3,...,element n}
其中,setname表示集合的名称,可以是任何符合Python命名规则的标识符;element 1、element 2、element 3、element n表示集合中的元素,个数没有限制,并且只要是Python支持的数据类型就可以。
列子
01 set1 = {'水瓶座','射手座','双鱼座','双子座'}
02 set2 = {3,1,4,1,5,9,2,6}
03 set3 = {'Python', 28, ('人生苦短', '我用Python')}
{'水瓶座', '双子座', '双鱼座', '射手座'}
{1, 2, 3, 4, 5, 6, 9}
{'Python', ('人生苦短', '我用Python'), 28}
由于Python中的set集合是无序的,所以每次输出时元素的排列顺序可能与上面的不同,不必在意。
使用set()函数创建
在Python中,可以使用set()函数将列表、元组等其他可迭代对象转换为集合。set()函数的语法格式如下:
setname = set(iteration)
setname:表示集合名称;
iteration:表示要转换为集合的可迭代对象,可以是列表、元组、range对象等。另外,也可以是字符串,如果是字符串,返回的集合将是包含全部不重复字符的集合。
下面的每行代码都可以创建一个集合
01 set1 = set("命运给予我们的不是失望之酒,而是机会之杯。")
02 set2 = set([1.414,1.732,3.14159,2.236])
03 set3 = set(('人生苦短', '我用Python'))
{‘不’, ‘的’, ‘望’, ‘是’, ‘给’, ‘,’, ‘我’, ‘。’, ‘酒’, ‘会’, ‘杯’, ‘运’, ‘们’,
‘予’, ‘而’, ‘失’, ‘机’, ‘命’, ‘之’}
{1.414, 2.236, 3.14159, 1.732}
{‘人生苦短’, ‘我用Python’}
在创建空集合时,只能使用set()实现,而不能使用一对大括号“{}”实现,这是因为在Python中,直接使用一对大括号“{}”表示创建一个空字典。
向集合中添加和删除元素
向集合中添加元素
向集合中添加元素可以使用add()方法实现。它的语法格式如下:
setname.add(element)
其中,setname表示要添加元素的集合;element表示要添加的元素内容。这里只能使用字符串、数字及布尔类型的True或者False等,不能使用列表、元组等可迭代对象。
列如 定义一个保存明日科技零基础学系列图片名字的集合,然后向该集合中添加一个刚刚上市的图书名字。
01 mr = set(['零基础学Java','零基础学Android','零基础学C语言','零基础学C#','零基础学PHP'])
02 mr.add('零基础学Python') # 添加一个元素
03 print(mr)
{‘零基础学PHP’, ‘零基础学Android’, ‘零基础学C#’, ‘零基础学C语言’, ‘零基础学Python’,
‘零基础学Java’}
从集合中删除元素
在Python中,可以使用del命令删除整个集合,也可以使用集合的pop()方法或者remove()方法删除一个元素,或者使用集合对象的clear()方法清空集合,即删除集合中的全部元素,使其变为空集合。
小结
字典和列表有些类似,区别是字典中的元素是由“键-值对”组成的。然后介绍了Python中的集合,集合的主要作用就是去重。至此,我们已经学习了4种序列结构,读者在实际开发时,可以根据自己的实际需要选择使用合适的序列类型。