当前课程知识点:Python 交互式程序设计导论 >  第5周 >  B 课程视频(字典和图片) >  Video

返回《Python 交互式程序设计导论》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《Python 交互式程序设计导论》慕课在线视频列表

Video课程教案、知识点、字幕

各位同学大家好

欢迎回到python交互式程序设计课程中

今天我们要学习一种新的、重要的数据类型,字典

提到字典同学们可能会想起我们在小学、中学时学习用的工具书

那么字典,这种数据类型

其实跟我们用的工具书的字典是有类似的地方的

它也是一种映射关系的表达

除此之外,它跟我们前面所学过的列表这种数据类型也是有很多相似的地方

下面,我们就开始深入学习字典这种数据类型

我们首先来看一下,作为工具书的字典,它的本质含义是什么

我们在学习过程中,使用字典的时候呢

常常是根据汉字来查找这个汉字的意义的

比如说,我要查找,纛这个字,它是什么意义呢

我们查找了它对应的意义解释是:古代军队里的大旗

所以本质上来讲,字典就是一种映射

我们之前学过的一种重要的数据类型叫,列表

它也可以看做一种映射关系

比如说,我在这举了一个例子

定义了一个列表类型的变量lst,元素是abcde

从左侧这张图大家可以看到,实际上

它是位置和元素内容的一个映射关系

比如说,我们0这个位置上存放的是a这个元素

1这个位置上存放的是b这个元素

我们可以把这些位置信息统称为key,键,键值

而abcde这些元素的内容我们可以把它称之为value

好,当然,这样表达式的这种写法同学们可能看起来也很直观

今天我们要学习的字典这种数据类型

本质上也是一种映射关系,我们来看一下

在这里呢,我首先定义了一个字典类型的变量

变量名叫dic,那么这个里面呢,我们是用花括号包裹这些元素的

究竟有几个元素呢,我们来看一下

一个元素,两个元素,第三个,第四个,一共有五个元素

那么元素内部是有结构的,大家看,冒号作为分割

前面这个部分实际上就是我们所说的key

冒号后面的部分就是我们所谓的value

我们用这样一张图来表示,大家可以看到

它也是key到value的一种映射关系

细心的同学可能已经发现

我们在前面那张幻灯片当中演示的list映射关系时

这一列,key的这一列都是0、1、2、3、4这样的整数类型

而字典它的key这一列,实际上大家可以看到,类型非常丰富

有整数类型、有字符串类型、有浮点类型,甚至还有元组类型

那么这恰恰就是list和字典的最大的一个区别

下面我们来系统介绍一下,字典和列表的根本性的区别

第一, 字典的key,可以是任意的、不可变的类型

而列表的key类型只能是整数类型,并且只能从0开始

第二点呢,同学们也需要注意一下,字典是无序的,列表是有序的

怎么证明呢,我在这给大家举了一个例子

我定义了一个字典类型和一个列表类型,分别用print输出语句对它进行输出

大家可以看到,字典类型输出以后它的顺序跟定义它的时候的这个顺序不一致

而列表类型输出以后跟它定义时的顺序是完全一致的

甚至字典类型,你重复输出它的顺序都有肯能发生变化

好,这一点大家需要注意一下

那么,字典是一种非常常用的数据类型

在实际的编程中,它的功能非常强大,可以帮助我们解决很多问题

那么在这里呢,我给大家介绍字典一些常用的方法

首先我们来学习通过key来获取元素的值,我们来看这个例子

在这里呢,第一句话,我是通过[]这种方式,来通过key获取元素的值的

比如说,dic[1.5],这个1.5当然不位置而是key值

好,我们来找一下1.5这个key值在这里

它对应的元素的内容,或者元素的值是c,所以呢,输出的是c

好,第二种方法呢,同样的效果,只是呢,我们调用了字典类型的get方法

Get里面有一个参数,这个参数呢,也是key的值

我们来找一下,key的值,那么它对应的元素内容是b

所以呢,我们输出了b,很好理解

这两种方法呢,都可以实现类似的效果

第二呢,是通过key,来对元素进行赋值

大家来看,我们通过的呢是[]这种方式

大家看,[]里面呢,这是一个key的值

我们找到,在这个位置,在这个位置

它原先对应的元素的值是b,现在我给它赋予了新的值是O

所以呢,这个位置就变成了O

我输出以后大家会看到

Key对应的值已经变成了O了

好,这个大家需要注意一下

当然细心的同学也会发现这个顺序跟这里声明的顺序也不一致

这又说明了key是无序的,这个字典类型是无序的

下面呢,我们要学习新的方法叫移除一个元素

就是把不需要的元素从字典里面删除

好,我们来看一下,用到的是字典类型的pop方法

括号里面仅仅有一个参数,这个参数依然是key的值

好,我们找一下1.5,1.5对应的元素是哪个呢,是1.5:c这个元素

那么经过pop方法处理呢,最终的效果是

这个元素会被删除,会被删除

我们输出一下,就会看到新的这样一个字典变量里面的元素是没有1.5:c这个元素

下面呢,我又举了一个例子,这个例子会报一个错

为什么呢,我来解释一下

这句话的含义是,我想在这个dic这个字典类型的变量当中

删除key是2的这样一个元素

如果没有那么会报一个error这样的错

好,我们来看,在dic这个变量里面有key值等于2的元素吗

找一下,显然是没有的,所以它就会报error这个错

这是第二个参数的含义,当然,同学们也可以把它写成汉字的形式

比如说,发生错误,这个时候这条语句执行在这里就会显示,发生错误

除了上述的这些基本方法以外

我们对字典常用的方法,常用的操作还有一个非常重要,叫遍历

所谓的遍历,解释一下,就是对字典里面每个元素都访问一遍

那么当然我们要用到循环结构

我们来看,实现的手段呢,有两种

第一种呢,相对简单,好理解一点,我们来看一下

我们用for这样一个循环结构

通过k这样一个变量来遍历或者访问在集合变量的dic这个里面的所有的key值

再来说一遍,dic这个字典类型的变量里面有几个key值呀,有几个元素

一个、两个、三个、四个、五个

那么这个循环结构呢,就会利用k这样一个循环变量

访问1、访问key、访问1.5、访问c、访问(0,1)

把这里面的元素的key值全部遍历一遍

然后把它输出

大家看,这个位置当然显示的是所有元素的key

那么通过[]这种方式,我们可以获取key所对应的value

显示的结果呢在右下角

第二种方式呢,也很直观

我们来看一下,我们通过一对key和value

这样一对,来访问dic这个字典类型变量的items这个方法返回的结果

这个时候呢,实际上我们获得是一个key对应的value

一次性的获得,不需要通过[]再去获取一遍

好,我们来看,直接我们就可以用print语句输出了

Key就获取的是字典类型变量里面的所有的key值

并且对应的value也会同时得到

显示的结果是一样的,好,显示的结果是一样的

我建议大家在初学的时候呢,你先熟练掌握一种遍历方式

等到一种方式熟练掌握以后

另外一种方式学习起来就会非常容易,也会记得很牢

好,最后呢,我想通过一个例子给大家介绍字典在实际编程当中是如何使用的

并且给大家展示字典强大的功能,会对我们处理现实问题提供很大的帮助

好,下面这个程序,我会在具体的开发环境当中给大家展示

在这里我只是简单介绍一下要完成什么功能

很简单,我要定义一个很长的字符串

这个字符串里面呢,有阿拉伯数字1,有大写的英文字母I

还有呢,这个小写的英文字母i

这个时候我想统计这些字符的个数,怎么去做

好,下面我们在pycharm当中给大家解释这个程序

打开pycharm,我们来看一下刚才的这个程序事例

首先介绍一下这个程序的主要功能

它实际上是用来统计这个字符串中特定字符的个数

这个很长的字符串呢,是由三种字符来组成的

有阿拉伯数字1、小写字母l和大写字母I

如果让人去统计1、l和I分别出现了多少次

这是一个非常枯燥而且容易犯错的工作

那么我们用字典类型可以很容易的实现这个功能

而且代码量呢,非常小,我们来看一下

在这里,我定义了一个函数叫char_number来统计字符的个数

只有一个参数,这个参数呢,就是你要统计的这个字符串

在这里呢,是str1

那么在函数体内部,我首先定义了一个空的字典类型的变量叫d

这时候它当然是没有任何元素的,没有任何元素

下面是一个for循环结构,在这个for循环结构当中呢

我是用c这个循环变量来遍历字符串s中的所有字符

再说一下,这个c呢,包含的是你要统计的很长的字符串

我呢,必须从第一个字符开始,一个一个的数起

所以呢,我用c来循环遍历s中所有的字符

那么当我获得一个字符的时候,我要做如下的判断

一种情况是c作为键值,作为字典类型的键key

它不在这个字典中,说明这个字符是第一次被统计到

这个时候呢,我们会创建一个新的字典类型的这样一个元素

c作为key值,注意,举个例子

比如说,我第一次扫描到1,1拿来判断一下,1在这个字典中吗

显然不在,因为字典此时是空的

这一个时候呢,我就会用d[1]计数

1我已经统计到了一次了,所以把它赋初值为1

表示呢这个1字符是第一次被统计到

好,如果你不是第一次被统计到,就去else这个分支

那么我会对原有的这个值增加1,表示又统计到了一次

好,我们再来举个例子

假设一直统计到这个位置又发现了一个1

这个c此时是1,那1在这个字典中吗

在的,因为之前我们已经统计过了一次

所以它会走else分支,那么我会把d[1],这是key值了

它原来的值是多少呢,是1,所以我们又把它累加了一个1

它就变成了2,就意味着1这个字符是被第二次被统计到的

那么最终呢,返回这个字典类型,我们运行一下

好,大家可以看到,这是运行的结果

这个d最终呢,会呈现出这样一个结果l有20个,I有6个,1有16个

这个时候,如果我们再增加一些字符,我们来看

比如说,我增加了小写的i,我增加了若干个小写的i

还增加若干个大写的L

好,更复杂了,我们再来运行一下

大写的L是3个,小写的i是4个

一行代码都不需要编,不管你这个字符串中有多少个类型的字符

实际上用这段代码都完全可以统计出来

这就是字典类型的一个典型应用

如果不用字典类型,我们当然会通过其它途径来实现这个功能

但是代码量会比这个多很多,会很复杂

那么这个例子呢,很直观的给大家展示了字典类型的优越性

其实,除了这个例子呢,我们还有很多的例子

可以说明字典的这个强大功能

但是在这里时间的关系就不一一举例了

只是提一下,实际上我们在做简单的加密算法的时候

也可以利用字典类型的这样一个映射关系来实现

有兴趣的同学可以在网上找到相关的例子

好,今天的课就讲到这里。

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。