搬砖的也能玩Python-基础篇3

搬砖的也能玩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"]

嵌套的类型我们会经常遇到,大家要能够灵活的运用各类型数据的访问方法,来获取嵌套中的元素。

探测八个蛋∣跳出手工测试的井

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180115G0Z7C400?refer=cp_1026

相关快讯

扫码关注云+社区