阿萌接受了一个新的编程任务,要求阿萌编写一个几何体面积公式的查询程序。程序运行后,用户输入几何体的名称,程序输出该几何体的面积公式。

阿萌对这次的编程任务有点发蒙,在程序中他需要把几何体的名称和几何体的面积公式对应起来,这样才能实现用户输入几何体名称,程序输出几何体的面积公式。

阿萌现在不清楚用什么数据结构来建立几何体名称和面积公式的对应关系,对应关系是类似于长方形对应长方形的面积公式,圆对应圆的面积公式等这样的关系。
阿萌思考了半天,他准备使用两个列表来建立几何体名称和面积公式的对应关系。两个列表的长度相同,一个列表存储几何体名称,一个列表存储面积公式,利用列表的索引建立对应关系。

上面的问题主要是事物间的对应关系,两个事物间的对应关系在我们生活中大量存在。
例如,公民身份证号对应唯一的一个公民、公司内的员工编号对应唯一的一个员工,类似身份证和公民、员工编号和员工的这种对应关系是两个事物间一对一的对应关系。

除了一对一对应关系外,还有一对多的对应关系。例如,一个人的身份证号可能对应多张银行卡、同一个姓名可能会对应多个人。

阿萌设计的数据结构可以实现程序的需求,不过Python的字典数据更适用于解决上面的问题。
字典是Python语言中唯一能够存储对应关系的数据。字典有两个属性,一个属性是key(也称为键),一个属性是value(也称为值),key和value统称为键值对,一个key可以对应一个值,也可以对应多个值。通过key可以获取到value。
例如,可以把学生编号和姓名以字典方式存储起来,学生编号存储到key中,学生姓名存储到value中。这样就可以通过学生编号很容易找到某位学生了。

学生编号与姓名是一对一的关系,上图也反映出学生编号与姓名是一对一的关系。
身份证号与银行卡则是一对多的关系。

由此可见,使用Python字典数据可以轻松解决几何体面积公式查询程序的数据结构问题。
字典元素放置在一对大括号“{}”内,字典的英文名称是dictionary。字典中的键值对key和value用英文冒号分隔,键值对之间用英文逗号分隔,一个键值对中key必须唯一,value可以多个值。
值可以取任何数据类型,但key必须是不可变的类型,如字符串、元组、数字等类型。

下面案例01演示了如何创建一个字典。

案例01创建了三个字典数据,dic_student字典的key和value都为字符串类型,dic_num字典的key为数字类型,value为字符串类型,dic_trup字典的key为字符串类型,value为列表数据。
Python也提供了创建字典的函数dict(),利用dict()可以动态创建一个字典,案例02演示了使用dict()函数动态创建一个字典。

案例02代码使用dict函数动态创建了字典dic_student和dic_num。dict函数传入的参数为元组或多个键值对。

字典在使用过程中,可能需要对字典数据做更新操作。例如,添加key、修改key对应的value等。在已有字典中添加一个key可以使用直接赋值的方法,其语法如下:

dict是字典的变量名称,key是待添加元素的键,value是待添加元素的值。当待添加的key已存在时,此语句为更新键值内容。

案例03代码演示了如何在已创建的字典数据中添加元素,或更新元素的内容。

当需要删除字典元素和字典时,可以使用del语句。del语句可以删除字典元素,也可以删除整个字典。
不过,程序一般不需要删除整个字典,因为当字典出了作用域(例如,程序结束,函数调用完成等),Python会自动删除该字典。

案例04代码演示了如何删除字典元素或字典。

访问字典的值有两种方式,一种方式是访问单个key的value,另一种方式是访问所有key的value。
访问单个key的值,可以使用访问运算符“[]”,访问语法如下:

也可以使用字典内置的get(key,default=None)函数来访问key的value,该函数返回指定key的value,如果value不在字典中,则返回默认值。

案例05代码演示了如何获取字典元素key对应的value。

如果需要访问字典中所有key的value,可以使用for循环来访问,for循环从字典的第一个key开始访问,直到所有的key被访问后,for循环结束。

案例06的代码演示了如何遍历字典所有的key,及访问key的value。

要获取字典key的value,一个前提是这个key要在字典中存在,当程序访问一个不在字典中存在的key时,程序就会出错。
当程序不确定要访问的key是否在字典中时,可以使用in或not in运算符来判断key是否在字典中。in或not in运算符返回一个布尔变量,in返回True时,表示key在字典中,not in返回True时,表示key不在字典中。

案例07代码演示了如何判断key是否在字典中。
阿萌掌握了字典数据的用法,他准备用字典作为几何体面积公式查询程序的数据结构。

在名称为area的字典中,几何体的名称是key,对应的几何体公式是value。
阿萌根据设计的数据结构绘制了流程图。

有了流程图,阿萌开始编写代码。他启动Python IDLE,在IDLE的Shell窗口新建一个代码文件,在新建的代码编辑窗口编写代码。

代码解读
案例08的代码首先创建了area字典,存储几何体以及对应的面积公式,几何体名称是字典的key,面积公式是key对应的value。创建area字典的代码被分成了4行,Python语言允许列表、元组、字典以元素之间的分隔符逗号来换行,以免一行代码过长影响代码的阅读效果。
由于用户输入的几何体名称可能不在字典中,因此需要判断用户输入的几何体名称是否在字典中,如果在就通过字典的key获取对应的value,此时key就是用户输入的几何体名称,value就是几何体名称对应的面积公式。

课程小结
字典可以存储两个事物间的对应关系,对应关系可以是一对一的关系,也可以是一对多的关系。
字典的元素用一对大括号“{}”括起来,字典中的键值对key和value用英文冒号分隔,键值对之间用英文逗号分隔。一个键值对中key必须唯一,value可以有多个值。值可以取任何数据类型,但key必须是不可变的类型,如字符串、元组、数字等类型。
上机练习
编写程序,创建一个字典dict,遍历dict,输出dict的key和value,用户输入key,输出key对应的value。dict包含下面的对应关系:
北京——中国的首都
济南——泉城
广州——羊城