本篇介绍Python中的字典数据类型,文中会讨论字典中的映射关系,字典的声明、赋值及其相关运算。通过本篇的学习,可以达成如下目标。
●了解字典中的映射关系
●掌握字典的声明和赋值
●如何访问字典数据和更新字典数据
映射是指两个事物之间的对应关系,两个事物间的映射关系在我们生活中大量存在。例如,公民身份证号对应唯一的一个公民、公司内的员工编号对应唯一的一个员工,类似身份证和公民、员工编号和员工的这种对应关系就是映射中的一对一关系。
除了一对一关系外,映射也有一对多关系。例如,一个人的身份证号可能对应多张银行卡、同一个姓名可能会对应多个人。当具有一对多关系的多个事物出现交集时,就要考虑去重机制。例如,当一个单位有重名的员工时,为了区分重名的员工,可能就会在重名员工的姓名前加上其它可区分的词语。
Python也提供了映射类型,字典是Python语言中唯一的映射类型。字典有两个属性,一个属性是key(也称为键),一个属性是value(也称为值),key和value统称为键值对,一个key可以对应一个值,也可以对应多个值。通过key可以获取到value。例如,可以把学生编号和姓名以字典方式存储起来,学生编号存储到key中,学生姓名存储到value中。这样就可以通过学生编号很容易找到某位学生了。
图1编号姓名映射结构图Python语言在存储字典结构时,会把key进行哈希操作,并根据哈希计算结果,选择在某一存储位置存储value,因此任何一个值存储的地址都取决于该值对应的键。当用户使用key访问value时,Python会对key进行同样的哈希计算得到value的存储地址,并从该地址读取value数据。
不同的Key进行哈希运算时,可能会产生同一哈希计算结果,这种现象称为碰撞。如果遇到这种情况,Python是如何处理的呢?Python使用散列表存储字典结构,当后加入value的存储地址与已经加入的value存储地址相同时,Python会将value存入一个链表,并将该链表的头指针存储到哈希码对应的散列表元素中。其存储结构如下图所示:
图2字典物理存储结构下面具体讨论Python字典的语法和应用,内容包括如何声明一个字典并赋值?如何访问和更新字典数据?如何删除字典元素和字典。
1、如何创建字典并给字典赋值
在Python语言中。声明字典用{}括起来,字典中的键值对key和value用英文冒号分隔,键值对之间用英文逗号分隔,一个键值对中key必须唯一,value可以多个值。值可以取任何数据类型,但key必须是不可变的类型,如字符串、元组、数字等类型。
例1:声明字典并赋值的例子
例1输出结果如下图所示。Python也提供了创建字典的函数dict(),利用dict()可以动态创建一个字典,本文主要讨论如何利用dict()函数创建字典,关于函数的概念在后面会有讲述。
例2:利用dict()函数创建字典的例子
例2输出结果如下图所示。字典内置了一个很方便的内建函数fromkeys()来创建一个字典,用该函数创建的字典的key都对应相同的值。fromkeys()需要传入两个参数,第一个参数指定key,第二个参数为字典所有key对应的初始值。
例3:利用内置函数fromkeys()创建字典的例子
例3输出结果如下图所示。2、如何访问字典的值
访问字典的值有两种方式,一种方式是访问单个key的值,另一种方式是访问所有key的值。
访问单个key的值,可以使用访问运算符”[]”,访问语法如下:
dict[key]
dict是字典的变量名称,key是键内容,该运算执行后,返回key对应的value。
也可以使用字典内置的get(key,default=None)函数来访问key的值,该函数返回指定键的值,如果值不在字典中,则返回默认值。
例4:访问字典单个key的值
例4输出结果如下图所示。如果需要访问字典中所有key的值,可以使用迭代器来访问,迭代器从字典的第一个key开始访问,直到所有的key被访问后,迭代才结束。
例5:迭代访问字典全部key的值
例5输出结果如下图所示。要获取字典key的值,一个前提是这个key要在字典中存在,当程序访问一个不在字典中存在的key时,程序就会出错。当程序不确定要访问的key是否在字典中时,可以使用in或notin运算符来判断key是否在字典中。in或notin运算符返回一个布尔变量,in返回True时,表示key在字典中,notin返回True时,表示key不在字典中。
例6:判断key是否在字典中
例6输出结果如下图所示3、如何更新字典数据
字典在使用过程中,可能需要对字典数据做更新操作。例如,添加新建、修改键对应的值。
在已有字典中添加一个键可以使用直接赋值的方法,其语法如下:
Dict[key]=value
Dict是字典的变量名称,key是要添加的键,value是新添加键对应的值。当要添加的key已存在时,此语句为更新键值内容。
例7:在已有字典中添加新建或更新键值
例7输出结果如下图所示4、如何删除字典元素和字典
当需要删除字典元素和字典时,可以使用Python提供的del语句。del语句可以删除字典元素,也可以删除整个字典。不过,程序一般不需要删除整个字典,因为当字典出了作用域(例如,程序结束,函数调用完成等),Python会自动删除该字典。
例8:删除字典元素和字典
例8输出结果如下图所示。从输出结果可以看出,删除dic_student字典后,再用print语句输出dic_student,程序会报错。
课程小结
(1)Python字典有两个属性,一个属性是key(也称为键),一个属性是value(也称为值),key和value称为键值对,一个key可以对应一个值,也可以对应多个值。通过key可以获取到value。Pythoy字典key和value的这种关系称为映射关系。
(2)在Python语言中。声明字典用{}括起来,字典中的键值对key和value用英文冒号分隔,键值对之间用英文逗号分隔,一个键值对中key必须唯一,value可以多个值。值可以取任何数据类型,但key必须是不可变的类型,如字符串、元组、数字等类型。
(3)访问字典的值有多种方式,可以使用访问运算符“[]”或字典的内置函数get(key)访问单个key的值。也可以使用迭代法访问全部key的值。当不确定字典的key是否存在时,可以使用in或notin运算符来判断key是否在字典中。
(4)可以使用Dict[key]=value语句更新或添加已有字典的数据。当语句中的key在字典中不存在时,该语句会将key添加到字典中,key的值为value;当语句中的key在字典中存在时,该语句会更新key所对应的值,值被更新为value。