欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础 Python完全自学教程》今天给大家分享的是第17课《 Python中的字典完全解读》。本节课是一个大课,我分了这些知识点进行详细讲解:1、python中字典的概念、特征、创建和删除详解。2、在Python中访问字典详解。3、在Python中遍历字典的三大方法详解。4、在Python中添加、修改、删除和更新字典元素详解。5、Python中的字典推导式详解。
目录
17.1、python中字典的概念、特征、创建和删除详解
17.1.1、字典的概念
17.1.2、字典的主要特征
17.1.3、字典的创建
17.1.3.1、创建空字典
17.1.3.2、直接赋值创建字典
17.1.3.3、通过给定的“键值对”创建字典
17.1.3.4、通过二元组列表创建
17.1.3.5、通过映射函数创建字典
17.1.3.6、通过dict对象的fromkeys()方法创建字典。
17.1.3.7、通过字典推导式创建
17.1.3.8、其他方法
17.1.4、字典的删除
17.2、在Python中访问字典详解
17.2.1、使用print()函数访问字典
17.2.2、使用字典对象的get()方法访问字典
17.3、在Python中遍历字典的三大方法详解
17.3.1、使用字典对象的items()方法可以遍历字典的项和字典的“键-值对”。
17.3.2、使用字典对象的keys()方法可以获取字典的“键”序列。
17.3.3、使用字典对象的values()方法可以获取字典的“值”序列。
17.4、在Python中添加、修改、删除和更新字典元素详解
17.4.1、在Python中添加字典元素。
17.4.2、在Python中修改字典元素。
17.4.3、在Python中删除字典元素。
17.4.3.1、使用del命令删除指定元素
17.4.3.2、使用clear()方法清空字典元素
17.4.3.3、使用pop()方法删除字典中指定的元素
17.4.3.4、使用popitem() 方法删除字典中最后一个键值对。
17.4.4、在Python中更新字典元素。
17.4.4.1、当update() 给定的键值对,在原字典不存在时,就会增加字典元素;
17.4.4.2、当update() 给定的键值对,在原字典存在时,就会修改字典元素;
17.5、Python中的字典推导式详解
17.5.1、生成指定范围的数值字典。语法格式如下:
17.5.2、使用字典推导式也可以根据列表生成字典。
在前面的Python课程学习中,我们学到了序列中的列表和元组,今天开始讲解序列的另一个常用数据结构--字典。
字典(dictionary)是无序的、可变的、保存的内容是以“键-值对”的形式存储的序列。
我们怎么去理解Python中的字典呢?我们读小学的时候,都用过《新华字典》,在《新华字典》中通过拼音或者部首,我们可以快速的查到对应的文字和解释。其中,《新华字典》里的拼音或者部首相当于Python中字典的键(key),而对应的汉字和解释相当于Python中字典的值(value)。键是唯一的,而值可以有多个。键及其关联的值称为“键值对”。
字典的主要特征如下:
17.1.2.1、通过键而不是通过索引来读取
字典有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
17.1.2.2、字典是任意对象的无序集合
字典是无序的,各项是从左到右随机排序的,即保存在字典中的项没有特定的顺序。这样可以提高查找顺序。
17.1.2.3、字典是可变的,并且可以任意嵌套
字典可以在原处增长或者缩短(无须生成一份拷贝),并且它支持任意深度的嵌套(即它的值可以是列表或者其他的字典)。
17.1.2.4、字典中的键必须唯一
不允许同一个键出现两次,如果出现两次,则后一个值会被记住。
17.1.2.5、字典中的键必须不可变
字典中的键是不可变的,所以可以使用数字、字符串或者元组,但不能使用列表。
和列表、元组一样,字典也有它自己的类型。在 Python 中,字典的数据类型为 dict
,通过type()
函数即可查看:
a = {'A': 1, 'B': 2, 'C': 3} #a是一个字典类型 print(type(a))
运行结果如下:
<class 'dict'> >>>
我们在定义字典时,每个元素都包含了两部分:键(key)和值(value),并且在“键”和“值”之间使用英文冒号分隔,相邻两个元素使用英文逗号分离,所有的元素都放在一个大括号“{}”中,语法格式如下:
dictionary = {'key1':'value1', 'key2':'value2', ..., 'keyn':'valuen',}
其中,相关的参数值如下:
dictionary:表示字典名称;
key1, key2, ..., keyn:表示元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组;
value1, value2, ..., valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
例如,某中学初三1班,M同学的语数英的成绩,用字典保存,代码如下:
chengji = {'语文':'88','数学':'96','英语':'86'} print(chengji)
运行结果如下:
{'语文': '88', '数学': '96', '英语': '86'} >>>
好了,简单的讲解了一下字典的语法,下面站长在线来给大家谈谈创建字典的8大方法:
字典和列表,元组一样都是可以创建空值的序列。在Python中,创建空字典居然还有两个方法:dictionary = {}
或者 dictionary = dict()
。
示例3.1.1:用dictionary = {}
方法创建空列表,输出结果,并打印数据类型
dictionary = {} print(dictionary) print("dictionary的数据类型为:",type(dictionary))
运行结果如下:
{} dictionary的数据类型为: <class 'dict'> >>>
示例3.1.2:用dictionary = dict()
方法创建空列表,输出结果,并打印数据类型
dictionary = dict() print(dictionary) print("dictionary的数据类型为:",type(dictionary))
运行结果如下:
{} dictionary的数据类型为: <class 'dict'> >>>
上面的,某中学初三1班,M同学的语数英的成绩,保存为字典就是直接赋值创建字典。
chengji = {'语文':'88','数学':'96','英语':'86'} print(chengji)
运行结果如下:
{'语文': '88', '数学': '96', '英语': '86'} >>>
语法格式如下:
dictionary = dict(key1=value1,key2=value2,...,keyn=valuen)
其中,相关参数如下:
dictionary:表示字典名称;
key1, key2, ..., keyn:表示元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组;
value1, value2, ..., valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
示例3.3:
a = dict(A = 1, B = 2, C =3) print(a)
运行结果为:
{'A': 1, 'B': 2, 'C': 3} >>>
定义一个二元组列表并且赋值,
list = [('A', 1), ('B', 2), ('C', 3)] a = dict(list) print(a)
运行结果为:
{'A': 1, 'B': 2, 'C': 3} >>>
语法如下:
dictionary = dict(zip(list1,list2))
其中,相关参数说明如下:
dictionary:表示字典名称。
zip()函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。如果想得到元组,可以将zip对象使用tuple()函数转换为元组;如果想得到列表,则可以使用list()函数将其转换为列表。
list1:表示一个列表,用于指定要生成字典的键。
list2:表示一个列表,用于指定要生成字典的值。如果list1和list2的长度不同,则与最短的列表长度相同。
示例3.5:某高校寝室住着4大美女,将他们的名字保存在一个列表中,相应的年龄保存在另一个列表中,根据名字和年龄创建一个字典。
思路:在IDLE中,我们打开草稿文件000.py,先定义两个均包含4个元素的列表,在应用dict()函数和zip()函数,将两个列表转化为对应的字典,并输出该字典。
name = ['美琳','梦洁','雪丽','美莲'] age = [18,19,19,18] a = dict(zip(name,age)) print(a)
运行结果为:
{'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} >>>
Python 中,还可以使用 dict 字典类型提供的 fromkeys() 方法创建带有默认值的字典,具体格式为:
dictionary = dict.fromkeys(list,value=None)
其中,list 参数表示字典中所有键的列表(list);value 参数表示默认值,如果不写,则为空值 None。
kemu = ['语文', '数学', '英语'] #作为键的列表 a = dict.fromkeys(kemu, 100) #指定科目的默认成绩为100 print(a)
运行结果如下:
{'语文': 100, '数学': 100, '英语': 100} >>>
(字典的最后一个知识点再详细讲解字典推导式)
a = {i:2*i for i in range(3)} print(a)
运行结果如下:
{0: 0, 1: 2, 2: 4} >>>
list = ['A', 1, 'B', 2, 'C', 3] a= dict(zip(list[::2], list[1::2])) print(a)
运行结果:
{'A': 1, 'B': 2, 'C': 3} >>>
同列表和元组一样,不再需要的字典也可以使用del命令删除。例如,通过下面的代码即可将已经定义的字典删除。
del dictionary
另外,如果只是想删除字典的全部元素,可以使用字典对象的clear()方法。执行clear()方法后,原字典将变为空字典。例如,下面的代码将清除字典的全部元素。
dictionary.clear()
除了上面介绍的方法可以删除字典元素,还可以使用字典对象的pop()删除并返回指定“键”的元素,以及使用字典对象的popitem()方法删除并返回字典中的一个元素。
由于昨天上午在做其他的,下午开始更新教程,一直到了网上12点都没有完成,因为做的是小白的新手教程,需要参考很多的资料,才能完成课程的编写。等我在网站和各个平台发布的时候,全部都是16日的凌晨发布的,相当于11月15日着24个小时,没有更新一篇文章。
从今以后要吸取教训,尽可能的在上午,至少就要在下午就要完成教程的更新。当然除了Python的新手教程更新以外,还要着手更新html、CSS、JavaScript、 php、Vue等教程,那样我争取在明年年底的时候,开发出自己的建站CMS,让更多的人免费的使用到更好的CMS系统,让想在自己行业深耕的人,搭建好自己的 知识体系,服务好自己的客户。
为什么我要一边学习一边更新免费的小白教程呢?因为我希望所有的人和我一样,可以通过学习新手教程,能够完成和我一样的学习效果,在整个网络上面,几乎没有系统的图文教程。当然,视频教程很多,很多公司都出了自己的完整的视频教程。拿新手Python教程来说,什么400集的,600集的都有。但是系统的图文教程,详细讲解的还真没有。当然像菜鸟教程、W3School这样的网站的图文教程是 《Python3.10.0 官方中文参考文档》属于参考文档,没有深入浅出的讲解,有一些很容易看懂,有一些却是看不懂。就像法律、数学,不是把法律条文、数学公式摆在这里就能看得懂的。
所以我在出品自己的Python教程时,是参考了很多很多的网站教程、视频教程、参考手册等内容,最终完成全面,精准,浅显易懂的文章教程。
今天是2021年11月16日,目前正在CSDN 看《2021 Google 开发者大会直播》,一边看直播,一边写今天的课程吧!再回到主题,今天要分享的是在Python中访问字典。
在Python中访问字典,同访问列表、元组差不多,都是使用print()函数。
以昨天的内容为例,某高校寝室住着4大美女,将他们的名字保存在一个列表中,相应的年龄保存在另一个列表中,根据名字和年龄创建一个字典。
name = ['美琳','梦洁','雪丽','美莲'] age = [18,19,19,18] a = dict(zip(name,age)) print(a)
运行结果为:
{'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} >>>
在Python中使用字典时,很少会直接输出字典的全部内容,而是根据指定的键得到相应的结果。
在Python中,访问字典的元素,通过键来访问的。(不像列表和元组,可以通过索引访问)。
如,要想获取上方“雪丽”的年龄,可以使用以下代码:
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} print("雪丽的年龄为:",a['雪丽'])
输出结果为:
雪丽的年龄为: 19 >>>
如果获取的指定键不存在,则会出现以下KeyError错误,如:
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} print("韩梅梅的年龄为:",a['韩梅梅'])
输出结果为:
Traceback (most recent call last): File "D:\Python\Python310\Doc\000.py", line 2, in <module> print("韩梅梅的年龄为:",a['韩梅梅']) KeyError: '韩梅梅' >>>
在实际开发中,很可能我们不知道当前存在什么键,所以需要避免该异常的产生。具体的解决方法是使用if语句对不存在的情况进行处理,即给一个默认值。例如,可以将上面的代码修改为以下内容。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} print("韩梅梅的年龄为:",a['韩梅梅'] if '韩梅梅' in a else '我的字典里没有此人')
即当“韩梅梅”不存在时,将显示以下内容。
韩梅梅的年龄为: 我的字典里没有此人 >>>
另外,Python中推荐的方法是使用字典对象的get()方法获取指定键的值。其语法格式如下:
dictionary.get(key[,default])
其中,dictionary为字典对象,即要从中获取值的字典;key为指定的键;default为可选项,用于当指定的键不存在时,返回一个默认值,如果省略,则返回None。
例如,通过get()方法获取“雪丽”的年龄,可以使用下面的代码。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} print("雪丽的年龄为:",a.get('雪丽'))
执行结果如下:
雪丽的年龄为: 19 >>>
在Python开发中,为了解决在获取指定键的值时,因不存在该键而导致抛出异常,可以为get()方法设置默认值,这样当指定的键不存在时,得到结果就是指定的默认值。例如,将上面的代码修改为以下内容。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} print("梅梅的年龄为:",a.get('梅梅','我的字典里没有此人'))
运行结果为:
梅梅的年龄为: 我的字典里没有此人 >>>
字典是以“键-值对”的形式存储数据的,所以就可能需要对这些“键-值对”进行获取。Python提供了遍历字典的方法,通过遍历可以获取字典中的全部“键-值对”。
items()
方法可以遍历字典的项和字典的“键-值对”。字典对象的items()
方法,语法如下:
dictionary.items()
其中,dictionary为字典对象;返回值为可遍历的“键-值对”元组列表。
17.3.1.1、遍历字典的项。
例如,定义一个字典,然后通过items()
方法获取“键-值对”的元组列表,并输出全部项,代码如下:
chengji = {'语文':'88','数学':'96','英语':'86'} for item in chengji.items(): print(item)
运行结果如下:
('语文', '88') ('数学', '96') ('英语', '86') >>>
上面的示例得到的是元组中的各个元素,我们可以称为遍历字典的项。
17.3.1.2、遍历字典的“键-值对”。
想要获取到具体的“键-值对”,可以通过for循环遍历该元组列表。可以使用下面的代码进行遍历。
chengji = {'语文':'88','数学':'96','英语':'86'} for key,value in chengji.items(): print(key,"的成绩是",value)
运行结果为:
语文 的成绩是 88 数学 的成绩是 96 英语 的成绩是 86 >>>
上面获取到的具体的每个键和值,我们称为遍历字典的“键-值对”。
站长在线温馨提示:字典的项是元组列表带(),字典的“键-值对”,是具体的键和值不带()。部分教程没有对字典的项和字典的“键-值对”进行区分。
keys()
方法可以获取字典的“键”序列。其语法格式如下:
dictionary.keys()
其中,dictionary为字典对象;返回值为可遍历的“键”的序列。想要获取到具体的“键”,可以通过for循环遍历该序列。
例如,定义一个字典,然后通过keys()方法获取“键”的序列,并输出全部“键”,代码如下:
chengji = {'语文':'88','数学':'96','英语':'86'} for item in chengji.keys(): print(item)
运行结果如下:
语文 数学 英语 >>>
上面的代码,就是输出了字典里面的全部“键”,下面我们来输出字典里面的全部“值”。
values()
方法可以获取字典的“值”序列。其语法格式如下:
dictionary.values()
其中,dictionary为字典对象;返回值为可遍历的“值”的序列。想要获取到具体的“值”,可以通过for循环遍历该序列。
例如,定义一个字典,然后通过values()
方法获取“值”的序列,并输出全部“值”,代码如下:
chengji = {'语文':'88','数学':'96','英语':'86'} for item in chengji.values(): print(item)
运行结果如下:
88 96 86 >>>
由于字典是可变序列,所以可以随时在其中添加“键-值对”,这和列表类似。向字典中添加元素的语法格式如下:
dictionary[key] = value
详细参数说明如下:
dictionary:表示字典名称;
key:表示要添加元素的键,必须是唯一的,并且不可变,例如可以是字符串、数字或者元组;
value:表示元素的值,可以是任何数据类型,不是必须唯一。
例如,还是以之前的保存4位美女的年龄为例,在创建的字典中添加一个元素,并显示添加后的字典,代码如下:
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} a['梅梅'] = 20 print(a)
运行结果如下:
{'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18, '梅梅': 20} >>>
从上面的结果中,可以看出又添加了一个“键”为“梅梅”的元素。
由于在字典中,“键”必须是唯一的,所以如果新添加元素的“键”与已经存在的“键”重复,那么将使用新的“值”替换原来该“键”的值,这也相当于修改字典的元素。
例如,再添加一个“键”为“梦洁”的元素,这次设置她为“20”。可以使用下面的代码。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} a['梦洁'] = 20 print(a)
运行结果如下:
{'美琳': 18, '梦洁': 20, '雪丽': 19, '美莲': 18} >>>
从上面的结果可以看出,并没有添加一个新的“键”为“梦洁”的元素,而是直接对“梦洁”进行了修改。
当字典中的某个元素不需要时,可以使用del命令将其删除。
例如,要删除字典dictionary的键为“梦洁”的元素,可以使用下面的代码。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} del a['梦洁'] print(a)
运行结果如下:
{'美琳': 18, '雪丽': 19, '美莲': 18} >>>
从上面的运行结果中可以看到,在字典a中只剩下3个元素了。
站长在线温馨提醒:
当删除一个不存在的键时,将抛出 KeyError 的异常。如:
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} del a['梅梅'] print(a)
运行结果为:
Traceback (most recent call last): File "D:\Python\Python310\Doc\000.py", line 2, in <module> del a['梅梅'] KeyError: '梅梅' >>>
一般情况下,需要将上面的代码修改为以下内容,从而防止删除不存在的元素时抛出异常。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} # 指定一个原始字典 if '梅梅' in a: # 如果在字典中 del a['梅梅'] # 删除一个元素 else: # 否则 print("你要删除的键不在字典中") # 告诉结果 print("原字典为:",a) # 输出原字典
运行结果为:
你要删除的键不在字典中 原字典为: {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} >>>
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} a.clear() print(a)
运行结果为:
{} >>>
上面就说明了使用clear()方法会清空字典里面的所有元素。
pop()方法和del命令类似,都是指定元素的键来删除该元素。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} a.pop('梦洁') print(a)
运行结果为:
{'美琳': 18, '雪丽': 19, '美莲': 18} >>>
从上面结果看出,pop()方法和del命令是一样的效果。
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} a.popitem() print(a)
运行结果为:
{'美琳': 18, '梦洁': 19, '雪丽': 19} >>>
使用update() 方法更新字典元素。
update() 方法和我们上面说的添加字典和修改字典类似,这时候有两种情况发生:
请看下面的例子:
a = {'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} a.update({'梅梅': 18, '梦洁': 20}) print(a)
运行结果为:
{'美琳': 18, '梦洁': 20, '雪丽': 19, '美莲': 18, '梅梅': 18} >>>
通过上面结果可以看出,使用update() 方法,给定的键值对没有时,会增加一个键值对;给定的键值对存在时,就会修改字典元素。
我们在前面学过《python中的列表推导式详解》和《Python中的元组推导式详解》,今天我们来学习《Python中的字典推导式详解》。
和列表推导式类似,使用字典推导式可以快速的生成一个新的字典。
dictionary = {Expression for var in range}
dictionary:表示生成的字典名称
Expression:表达式,用于计算新字典的元素
var:循环变量
range:采用range()函数生成的range对象
例如:定义一个10以内的平方数的字典,代码如下:
a = {i:i**2 for i in range(10)} print(a)
运行结果为:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} >>>
列如,定义两个4个元素的列表,,在应用字典推导式和zip()函数,将两个列表转换为对应的字典,并且输出该字典,代码如下:
name = ['美琳','梦洁','雪丽','美莲'] age = [18,19,19,18] a = {i:j for i,j in zip(name,age)} print(a)
运行结果为:
{'美琳': 18, '梦洁': 19, '雪丽': 19, '美莲': 18} >>>
站长在线温馨提醒:大家可以和 映射函数创建字典dictionary = dict(zip(list1,list2))
进行对比哦!
相关阅读:
本站百科词条:Python
《零基础Python完全自学教程》目录
1、认识python
2、安装python及写第一个Python程序
3、Python开发工具介绍
4、Python语法特点
5、Python中的变量
6、Python中的基本数据类型
7、Python中的基本输入和输出
8、Python中常用的运算符
9、Python中运算符的优先级和条件表达式
10、Python中的三大程序结构
11、Python中的选择语句
12、Python中的循环语句
13、Python中的break语句、continue语句和pass语句
14、Python中的序列知识详解
15、Python中的列表
16、Python中的元组系列知识