零基础学习 Python 之字典

写在之前

大家好,这里是零基础学习 Python 系列,在这里我将从最基本的Python 写起,然后再慢慢涉及到高阶以及具体应用方面。我是完全自学的 Python,所以很是明白自学对于一个人的考验,所以在这里我会尽我最大的努力,把 Python 尽可能简单的表述清楚,让更多想要学习 Python 的朋友能够入门。同时写这个教程也算是对自己之前所学知识的一个巩固和提高,喜欢的朋友们可以点个关注,有问题欢迎随时和我交流。本文所有的代码编写均是Python3 版本。

字典的定义

相信大家对字典并不陌生吧,学生时代一块块的大小 “砖头”,还记得怎么用吧?先从索引查找,不管是拼音还是偏旁部首,通过索引查到相应的内容,这样就不需要我们从头一页一页的找,这种方法可以很快的找到目标。正是基于这种需求,Python 里有了一种 dictionary 的对象类型,翻译过来就是 “字典”,用 dict 表示。

创建字典

字典里的元素是一对一对的,有个特别好听的名字叫:键 / 值对,形式是 "key" : "value" ,前面的是键,后面是前面的键所对应的值,键 / 值之间用英文的冒号隔开,每一对键 / 值之间用英文的逗号隔开。在字典中,键是唯一的,不能重复,而值则是对应于键,可以重复。

创建字典的方法有很多,我在这里挑几种依次给大家说说。

1.创建一个空的字典,然后向里面加东西,当然也可以创建一个非空的字典然后在里面加键 / 值对。

>>> first_dict = {}

>>> first_dict

{}

>>> second_dict = {'name':'rocky','like':'python'}

>>> second_dict

{'name':'rocky','like':'python'}

>>> second_dict['where'] ='China'

>>> second_dict

{'where':'China','name':'rocky','like':'python'}

在前面的文章里我们讲过字符串,列表和元组,其中列表是可变的,字符串和元组是不可变的,那么字典呢?我们来试验一下。

>>> second_dict = {'name':'rocky','like':'python'}

>>> second_dict['name'] ='leey'

>>> second_dict

{'name':'leey','like':'python'}

以上表明,字典是可以修改的,即它是可变的。

2.可以利用元组创建字典,请看下面的实例。

>>> tup = (['name','rocky'],['like','python'])

>>> my_dict = dict(tup)

>>> my_dict

{'name':'rocky','like':'python'}

或者直接用下面的形式也可以:

>>> my_dict = dict(name ='zhangsan',other ='lisi')

>>> my_dict

{'other':'lisi','name':'zhangsan'}

在这里再提一次,千万要记得在字典中 “键” 必须是是不可变的数据类型, “值” 可以是任意的数据类型。所以元组可以当字典的键,但是列表可以,列表只能做值。

访问字典的值

字典中的 键/值 实际上就是一种映射关系,只要知道了 “键”,就肯定知道 “值”。

>>> my_dict = dict(name ='zhangsan',other ='lisi')

>>> my_dict['other']

'lisi'

所以字典中的 “键” 是多么的好用,通过它可以查找值,可以添加值,可以改变值。

既然字典是一种映射关系,所以在字典里也就不需要考虑排序的问题,只要有了 “键” 就可以知道 “值”,那么键 / 值对的位置在哪里也就不需要考虑了,如果你仔细看过上面的例子,你就会发现添加完的值在字典中的显示并不按照它的添加顺序。又因为没有了排序,所以在字典中也没有索引,所以就不存在索引 & 切片。

字典这种键 / 值对的方式存储数据是一种非常高效的方法,查找速度超快,相同的,如果你要在列表中查找一个值,需要从头开始一个个的找,直到找到了指定的索引值,但是在字典中,直接就可以通过 “键” 找到 “值”,小规模数据的时候这种好处可能不显,当存储大规模数据的时候,这种好处是相当明显的。

字典的基本操作

下面我用一些实例来依次演示字典中的基本操作:

>>> my_dict = {'name':'rocky','like':'python','age':23}

>>> len(my_dict)#返回字典中键 / 值对的数量

3

>>> my_dict['age']#返回字典中的键值

23

>>> my_dict['like'] ='C ++'#改变字典中的键值

>>> my_dict

{'age':23,'name':'rocky','like':'C ++'}

>>> del my_dict['like']#删除指定的键 / 值对

>>> my_dict

{'age':23,'name':'rocky'}

>>>'like'in my_dict#检查字典中是否含有指定键的项

False

字典的方法

与前面所讲述的其它对象类型相似,字典这个对象类型也有一些能够实现对其操作的方法。

1.clear

clear 清除字典中所有的元素,得到的是空的字典。

>>> my_dict = {'name':'rocky','like':'python'}

>>> my_dict.clear()

>>> my_dict

{}

>>> del my_dict

>>> my_dict

Traceback (most recent call last):

File"", line1,in

NameError:name'my_dict'isnotdefined

上面的例子我们可以看出 clear 和 del 的区别很大,clear 是将字典清空,得到空字典,而 delete 是将字典删除,直接从内存中去掉。

2. get & setdefault

这两个是跟键 / 值对相关的方法,get 方法就是要得到字典中某个 “键” 的 “值”,那么这就有人要说,不是上面的时候我们已经讲过直接查就行吗?在这里的 get 和之前说的还不太一样,这里的 get 稍微宽松一些,如果想要查的值不存在,get 不会有啥反应,而之前说的方法会报错。

>>> my_dict = {'name':'rocky','like':'python'}

>>> my_dict.get('name')

'rocky'

>>> my_dict.get('age')

>>> my_dict['age']

Traceback (most recent call last):

File"", line1,in

KeyError:'age'

setdefault 也是用来查找字典中某个 “键” 的 “值”,如果查找的 “键” 存在的话就正常输出,如果不存在的话,就在字典中加入这个键 / 值对。

>>> my_dict = {'name':'rocky','like':'python'}

>>> my_dict.setdefault('like')

'python'

>>> my_dict.setdefault('age','23')

'23'

>>> my_dict

{'name':'rocky','like':'python','age':'23'}

3.items & keys & values

这是字典的 3 个方法,它们之间有相似之处,很简单,请看下面的实例:

>>> my_dict = {'name':'rocky','like':'python'}

>>> my_d = my_dict.items()

>>> my_d

dict_items([('name','rocky'), ('like','python')])

>>> my_k = my_dict.keys()

>>> my_k

dict_keys(['name','like'])

>>> my_v = my_dict.values()

>>> my_v

dict_values(['rocky','python'])

4.pop & popitem

pop 和 popitem 是字典中的删除操作。

pop 是以字典的 “键” 为参数,删除指定的键 / 值对,pop 中的参数不能省略且如果删除字典中没有的键 / 值对,会报错。

>>> my_dict = {'name':'rocky','like':'python'}

>>> my_dict.pop('name')

'rocky'

>>> my_dict

{'like':'python'}

>>> my_dict.pop()

Traceback (most recent call last):

File"", line1,in

TypeError:pop expected at least1arguments, got

>>> my_dict.pop('age')

Traceback (most recent call last):

File"", line1,in

KeyError:'age'

popitem 和 pop 有相似之处,但是 popitem 不用写参数,但是它删除的不是最后一个,因为我们说过字典没有顺序,所以 popitem 是随机删除一个,至于删除谁,完全看命。

5.update

update 就是更细字典,参数可以是字典或者某种可迭代的对象,至于什么是可迭代这里你可以先知道这么个词,之后我们会说到,它的返回值是 None,你也可以理解成没有返回值。

>>> my_dict = {'name':'rocky','like':'python'}

>>> first = {'age':23}

>>> my_dict.update(first)

>>> my_dict

{'name':'rocky','like':'python','age':23}

>>> first

{'age':23}

写在之后

字典的方法其实还有一个 copy 没讲,就是复制 ( 拷贝 ) 函数,本来像在这里写的,但是因为涉及到了浅拷贝和深拷贝,理解起来比较麻烦,再加上今天的内容已经够多了,所以我准备明天的文章专门写一下拷贝相关的内容。

最后感谢你能看到这里,希望我写的东西能够让你有到收获,但是我还是希望我在文章里插入的代码,你们能自己动手试一下,都很简单。原创不易,每一个字,每一个标点都是自己手敲的,所以希望大家能多给点支持,该关注关注,该点赞点赞,该转发转发,有什么问题欢迎在后台联系我,也可以在公众号找到我的微信加我。

The end。

走一波关注呗...

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180717A09H7Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励