有一件很有趣的事情,那就是图书管理员这个职业是个很神奇的职业。
在这个职业上造就了很多伟大的人物,他们的思想和学说影响深远,改变着我们的世界。
老子(李耳)曾经就是周朝的王室图书管理员,后来写下了《道德经》巨著,流传至今。
爱因斯坦曾经在瑞士伯尔尼专利局做图书管理员,期间阅读了大量专利文献,最后写下了相对论,成就也不用多说。
当然还有更多伟大的人物,这里就不一一举例了。
从字典或者叫目录这个东西来讲,它是图书管理不可或缺的一个东西,从用来查询生字的字典到用来按图索骥在海量的书籍中找到自己想要的那一本,字典都发挥着巨大的作用。
本章我们主要讲python的字典的基本概念和相关运用。
本章知识点:
字典的定义查找字典的内容遍历字典数据修改字典的数据key的唯一性想象一下,如果我们把图书馆的书存在一个列表里会是什么样。
dic_list=[C语言编程,Python核心编程,前端工程,大数据分析]
当我们要查找某一本书的时候,有两个办法。
遍历列表,挨个比对书名。查询书名所在的索引编号,再根据编号去取书名。事实上,查询列表索引的办法和遍历比对没多大区别,因为程序内部实现还是需要依次去遍历列表进行比对。
上图是查询列表中的信息的两种办法,这个方法看起来简单,但是在运行效率上有很大的问题,如果我们的书籍数量达到万本时查询效率就会变得很低,因为我哪怕只查找一本书,也需要把这个列表遍历一次。
虽然我们说在python语言里效率不是最重要的,但是这种明显的数据结构不合理导致的问题,还是应该在编程时注意一下。
现在我们回想一下小时候看过的新华字典的内容是怎么样的?
比如我想查找坑这个字,如果按照字典的方式来查,只需去查找目录就知道它具体在页,我就可以直接翻到页去查看这个字的详情,而不是像列表查询那样,需要一页一页的遍历下去,直到翻到页才知道。哦,原来坑在这。
幸好在计算机的世界里,我们根据现实中的案例也做了相应的投射,绝大部分语言里都有字典这么一种数据类型,可能在python里叫字典,在JAVA里叫map,在javascript里叫Object。不过其本质上都是一回事。
让我们来定义一个python里的字典吧。
字典的定义
如上图所示,我们定义了一个字典,里面包含三条数据,语法结构如下:
字典变量名={
key(键):value(值),
.......
}
这个结构看起来挺简单的,我们通过这个例子想必已经发现,字典的查询方式是只要给它一个指定的key值(也就是用来查询的值),它就可以返回对应的value(内容)。
这个key-value的之间需要用冒号隔开,并且每一组key-value末尾需要有逗号以便于和下一组内容区分开,最后一组key-value末尾可以不需要逗号,当然加上也没有影响。
查找字典不存在的key
如果我们向字典查询一个不存在的key时,会发生什么事情?python解释器会认真的回答我们一个错误:KeyError。
那么我们遇到一个不知道具体内容的字典,同样也不知道里面有哪些key的时候,如何避免查询时报错呢?
我们可以通过字典自带的get()方法来查询key的值,如果没有对应的key时,程序会返回一个None类型的数据给我们。
None这个数据类型在python语言中表示空值,也就是什么都没有的意思。在逻辑表达式if中,None也代表False。
以上是在字典查询key的时候为None值时的用法。
修改字典内容
字典内容除了在初始化时定义,我们同样可以在程序运行过程中去修改它。
通过以下这样的语法来修改字典中的数据
字典名[key]=值
遍历字典
和列表一样,我们也可以通过for循环遍历字典。
我们注意到在循环时我们通过dic.items()这个方法取出key和value的内容。
事实上items()方法每次会返回一个tuple类型的数据给我们(key,value),也就是说它会返回两个值,那么同样我们在变量赋值这里就可以写两个变量了,分别就是key和value或者别的两个变量命名。
以上例子展示了我们通过dic.items()取到的是什么内容。
字典key唯一性
值得注意的是字典里的key是唯一的,也就是说我在字典里添加了python语言核心编程:评价不错这么一个key-value数据后,这个字典不可能再用相同的key容纳别的内容了。
如果再再添加一个python语言核心编程:超级棒或者别的key-value数据后,我们先来看看结果。
发现了吗,字典同时只允许一个同名的key存在,如果有新增加进来的同名key,那么就会覆盖之前的内容。这个跟列表有很大差别,列表是支持存在相同的内容的。
关于python字典的妙用还很多,事实上当我们学好列表和字典之后,基本就能用学到的知识干很多有价值的工作了。
比如我们有一个列表,里面包含1千万个随机数字,每个随机数的范围是0-9。然后我们希望知道每一个数字出现过多少次,这就可以利用字典的特性来解决。
关于字典的更多概念和用法我们将在高级课程中讲到,也许大家在编写python程序时利用字典这些特性做出一些有趣的功能,做一个伟大的图书管理员。
欢迎