搬砖的也能玩Python——基础篇
3-常见的基础集合类型2(字典、集合)
回顾
上一篇中,我们了解了两种集合类型:列表、元组,同时也学习了一个非常方便的切片操作。今天这篇内容,我们主要学习另外两种集合类型:字典、集合。
一、字典
我们已经知道列表是一系列按特定顺序排列的元素,每个元素都有自己的索引,我们想要获取元素的话,只需要通过索引就可以获取。但是如果说一个列表非常大,有上万个元素的话,每次找到我们需要的元素,都必须按照索引从头到尾开始找,直到找到我们需要的元素。有没有什么办法可以更加快速灵活的找到我们需要的元素呢?这个时候就需要字典出马了。
字典是用一系列的“键-值”对来表示,放在大括号({ })中,键和值之间用分号(:)来分隔,用逗号(,)来分隔其中的“键-值”对,也就是。
我们要注意的是:
在一个字典中,“键”必须是唯一的
在一个字典中,“键”必须是不可变的数据类型
在一个字典中,值可以是任意数据类型,值可以相同
字典中的“键-值”对之间并没有特定的顺序
不可变的数据类型
什么是不可变的数据类型呢?
简单点说,就是定义好的数据,不会发生变化,那么这个数据所属的数据类型就是不可变的。
按照前面两篇文章学习的内容,只有列表在定义好之后,可以进行增加、修改、删除,所以列表就是可变的数据类型,不可以作为字典的“键”;而元组是不可变的列表,所以元组可以作为字典的“键”。其他的数据类型,比如数字、字符串、布尔值,定义好之后都不会变,都可以作为字典的“键”。
可以作为字典的“键”:数字、字符串、布尔值、元组
不可以作为字典的“键”:列表
对于字典,我们还可以这样通俗的去理解:我们给几万条数据做了一个目录,每一个数据都有一个页码对应,当我们想找到相应的数据时,我们先从目录里面找一下这个数据在第几页,然后翻到那一页,就可以找到数据了。如果是列表的话,就是没有目录,只有页码,要一页一页的去翻,直到翻到数据所在的那一页。所以Python中的字典可以跟我们上学的时候用过的新华字典联系起来。
最后,我们来举几个简单的字典例子:
从上面这些例子的输出结果可以很清晰的看到,我们的字典没有特定的顺序。如果想要创建有特性顺序的字典,需要用到Python内置的collections模块,这部分内容我们将在高级篇中介绍,欢迎大家持续关注。
二、字典的简单操作
我们已经了解了列表可以进行元素的访问、修改、增加、删除,那么字典的访问、修改、增加、删除应该如何操作呢?
访问字典的值
在列表中,我们是用元素的索引来访问具体的元素,其实我们可以把索引想象成列表各元素的“键”,所以我们要访问字典的值,只需要提供“键”就可以了,将“键”放在方括号中,紧跟在字典后面即可。
字典[键]
同样的,要想获得字典的长度,我们也是使用len( )方法。
len(字典)
修改字典的值
了解了字典的访问之后,我们来看一下字典的值的修改,其实也跟列表类似,将某一个“键”重新赋值即可。
字典[键]=新的值
注意
由于我们的“键”是不可变的数据类型,所以对于字典的修改,我们也只是修改“值”,而“键”是无法修改。
增加字典内容
由于我们的字典是没有特定顺序的,所以我们增加字典内容的时候,也就不存在在什么位置增加,而且增加的“键”也不能跟现有的“键”重复。
增加字典内容的方式跟修改字典类似,只是我们在字典后面的方括号填入的“键”是一个“新键”即可,这样就完成了字典内容的增加。
字典[新键]=新键对应的值
删除字典内容
字典的删除也可以借鉴我们的列表:
删除指定“键-值”对(删除后不再使用)
删除指定“键-值”对(删除后还会使用)
1、删除指定“键-值”对(删除后不再使用)
当我们删除指定“键-值”对,并且不再使用这个值时,我们可以用del方法,后面跟具体要删除的指定的字典的“键”。
del 字典[键]
2、删除指定“键-值”对(删除后还会使用)
跟列表一样,我们可以用pop( )方法,解决del方法无法告诉我们删除的具体值的问题,在pop( )方法的括号中,填入要删除的字典的“键”即可。
字典.pop(键)
注意
由于字典没有特定的顺序,所以我们在用pop( )方法的时候,括号中必须要填写“键”,不能像列表一样,不填写内容会删除最后一个元素。
如果我们不填写字典的“键”,系统会报异常,提示我们需要填写一个参数。
三、集合
最后我们再了解一个概念——集合,就是一系列没有特定顺序、没有重复数据的元素。集合用大括号({ })来表示,用逗号(,)来分隔其中的元素,也就是。
也可以用set( )方法,将列表、元组、字符串、数字、布尔值转变成集合。
我们需要注意的是:
集合中的元素必须是不可变的数据类型
集合中的元素必须唯一,不能重复,创建集合的时候,如果有重复的元素,Python会自动删除重复的元素
集合中的元素没有特定的顺序
我们来看几个集合的例子:
从上面的例子中,可以很清晰的看到,当存在重复的元素时,我们最终得到的集合,都会把重复的元素删掉,保留一个。
四、集合的简单操作
通过前面的了解,我们发现集合既不像列表那样有顺序,也不像字典那样有个“键”,所以要想单独访问集合中的某一个元素,现在是没有办法的。但我们可以利用for循环来遍历集合中的每一个元素,具体的方法将在下篇文章中详解。
本次我们就简单了解一下集合的增加、删除、交集、并集、差集。
增加集合元素
在集合中,我们通过add( )方法或者update( )方法,来添加新的元素。
集合.add(新元素)
同样的,由于集合的元素必须是唯一的,所以在上图的例子中,当我们再次添加数字2的时候,整个numbers集合是没有发生任何变化的。
集合.update(新元素)
从上面的图片中,我们可以看到,在使用update( )方法的时候,我们要把增加的元素放在了括号中,也就是以元组的形式往里增加,而前面的add( )方法则可以直接把要增加的元素放在add( )方法的括号中。
如果update( )方法也很add( )方法那样添加的话,会有下图的报错。
思考
为什么会有这样的区别的?
解析
这是由于update( )方法在添加元素的时候,会把整个要添加的元素进行拆分,拆分成单个的元素,再添加到集合中,这就要求添加的元素必须是可迭代的(iterable),同时添加的元素也必须是不可变的数据类型;而add( )方法,则是把整个要添加的元素作为一个整体,添加到集合中去。
具体的关于可迭代的(iterable)内容,我们将放在高级篇的迭代器中详细讲解。
我们来看下面这个例子,可以非常清楚的对比出add( )方法和update( )方法的区别。
我们可以看到,当用add( )方法时,元组(4, 5, 6)会作为一个整体添加到numbers1中,使得numbers1的结果最终为;而在update( )方法中,会把(4, 5, 6)拆分成4、5、6三个元素分别添加到numbers2中,由于4、5已经存在,所以最终只把6添加了进去,使得numbers2的结果最终为。
删除集合元素
在集合中,我们讲两种删除的方法:
删除具体的某一元素
随机删除某一元素
1、删除某体的某一元素
我们可以用remove( )方法,在括号中填入要删除的具体值即可。
集合.remove(具体元素)
2、随机删除某一元素
我们可以用pop( )方法,随机删除一条元素,由于集合没有特定顺序,也没有字典那样的键,所以我们没有办法通过索引或者键来删除某一元素。
集合的运算
我们来了解三个集合的运算,这里的运算跟数学上集合的运算完全一样,我们来看一下Python中是如何进行集合的交集、并集、差集运算。
1、交集运算
假设有2个集合A和B,所谓的交集运算,就是既在A中出现,也在B中出现的元素的集合,我们用"&"符号来运算。
2、并集运算
假设有2个集合A和B,所谓的并集运算,就是在A中出现,或者在B重出现的元素的集合,我们用""符号来运算。
3、差集运算
假设有2个集合A和B,所谓的差集运算,就是在A中出现,但没有在B中出现的元素的集合,我们用符号"-"来运算。
其实集合还有很多运算,感兴趣的读者可以自行了解。
五、嵌套
最后我们来学习一个比较复杂的数据嵌套,主要讲下面几种:
列表嵌套列表
列表嵌套字典
字典嵌套列表
字典嵌套字典
我们来学习如何获取嵌套数据中的某一个元素,其实就是从外到内,一层一层的把数据类型分析出来,利用各数据类型的访问方法来找到我们想要的元素。这种操作在我们处理爬取的数据时,经常会用到。
思考
下面我会列出4种嵌套,我们一起找到“火箭”这个元素。
1、列表嵌套列表
看到图片中的嵌套,我们先来分析,它是由2层的方括号组成,所以也就是列表嵌套列表的格式,即[[ ], [ ], [ ]],最外面一层是个列表,列表中的每一个元素也还是列表,我们只需要用2次列表的访问方式。
首先我们看到“火箭”是在第3个方括号中,也就是索引为2的元素中,我们先用西部球队[2]的方法,得到“火箭”所在的列表,此时我们把西部球队[2]看做一个新的列表,“火箭”在这个列表中的索引是0,所以用西部球队[2][0]就可以找到“火箭”了。
答案
西部球队[2][0]
2、列表嵌套字典
看到图片中的嵌套,我们先来分析,它最外层是方括号,里面一层是大括号,所以也就是列表嵌套字典的格式,即[{ }, { }, { }],最外面一层是个列表,列表中的每一个元素又是一个字典,我们需要先用列表的访问方式,再用字典的访问方式。
首先我们看到“火箭”所在的字典是在第3个大括号中,也就是索引为2的元素中,我们先用西部球队[2]的方法,得到“火箭”所在的字典,此时我们把西部球队[2]看做一个字典,“火箭”在这个字典中的“键”是"HOU",所以用西部球队[2]["HOU"]就可以找到“火箭”了。
答案
西部球队[2]["HOU"]
3、字典嵌套列表
由于字典的“键”是不可改变的元素类型,所以我们所谓的字典嵌套列表,就是指字典的“键”所对应的“值”是列表类型。
看到图片中的嵌套,我们先来分析,它的最外层是大括号,也就是字典,字典的“键”所对应的“值”是方括号,所以也就是字典嵌套列表的格式,即{"键": [ ], "键": [ ], "键": [ ]},我们需要先用字典的访问方式,再用列表的访问方式。
首先,我们看到“火箭”所在的列表,对应的“键”为“西南部赛区”,我们先用西部球队["西南部赛区"]的方法,得到“火箭”所在的列表,此时我们把西部球队["西南部赛区"]看做一个列表,“火箭”在这个列表中的索引为0,所以用西部球队["西南部赛区"][0]就可以找到“火箭”了。
答案
西部球队["西南部赛区"][0]
4、字典嵌套字典
由于字典的“键”是不可改变的元素类型,所以我们所谓的字典嵌套字典,就是指字典的“键”所对应的“值”是字典类型。
看到图片中的嵌套,我们先来分析,它的最外层是大括号,也就是字典,字典的“键”所对应的“值”也是大括号,所以也就是字典嵌套字典的格式,即{{ }, { }, { }},我们需要用2次字典的访问方式。
首先,我们看到“火箭”所在的字典,对应的“键”为“西南部赛区”,我们先用西部球队["西南部赛区"]的方法,得到“火箭”所在的字典,此时我们把西部球队["西南部赛区"]看做一个新的字典,“火箭”在这个字典中的键是"HOU",所以用西部球队["西南部赛区"]["HOU"]就可以找到“火箭”了。
答案
西部球队["西南部赛区"]["HOU"]
嵌套的类型我们会经常遇到,大家要能够灵活的运用各类型数据的访问方法,来获取嵌套中的元素。
探测八个蛋∣跳出手工测试的井
领取专属 10元无门槛券
私享最新 技术干货