从Scratch到Python 13 字典

我们已经知道,在处理具有多个元素的数据时,我们一般会使用列表。比如,用一个列表存储姓名,一个列表存储语文成绩,一个存储数学成绩,一个存储英语成绩。如果要检索某位同学的所有成绩,我们一般会先在“姓名”列表中查询这位同学的索引(也就是从0开始的序号),找到之后,根据同一索引号去其它三个列表中检索出他的成绩。不管是以前使用Scratch还是现在用Python,我们已经熟悉了这种处理方式。问题是,这种处理方式也有缺点: – 查询起来比较麻烦; – 四个列表必须顺序完全一致,只要错一个,所有人的成绩全乱了; – 如果你要增加一位同学,必须到四个列表中同时增加,删除也是如此

 

01 Scratch中的多列表.png

 

有没有更简单的方法处理?有,这就是Python为我们提供的字典。

1、字典定义

字典是包括0或多个键值对的集合,键值对之间没有顺序。“键”就是用来查询信息的元素,而“值”是你要检索的数据。在Python中以大括号“{ }”来包括键值对,键和值之间通过冒号连接,键值对之间使用逗号隔开。

注意,以后在谈到语法中的标点符号时,只要不特别提出,一般是指英文半角状态下的标点符号,而不是指汉字状态下的全角符号。

例如,我们可以用一个字典来存储每位同学的身高:

height = { '乐乐': 175, '欢欢':180, '格格':165,'图图':173 }
print(height)
print(type(height))  # 输出<class 'dict'>,即字典类型

这里我们用大括号建立了一个字典,这是创建字典的一种方法,大括号内可以包括0或多个键值对,如果为0是空字典。你也可以用dict()函数来创建字典,dict()函数的参数可以为空,也可以是表示两个元素对应关系的映射:

height =dict()
print(height)  # 创建了一个空字典
height1 = dict(乐乐=175,欢欢=180,格格=165,图图=173)
print(height1)

这里还可以使用zip函数把两个列表“压缩”之后转换为字典:

list1 = [ '乐乐', '欢欢', '格格','图图' ]
list2 = [175,180,165,173]
height = dict(zip(list1, list2))
print(height)  # 与前面的示例一样的字典

关于字典有几点注意事项: – 字典的“键”不能重复。如果一个键被赋值多次,会以最后一次赋值为准;比如你在创建时写了两个“乐乐”的身高,会以最后一个为准; – 字典可以嵌套其它数据类型。比如一个键值对应的可以是数字,也可以是一个列表,甚至可以是另一个字典; – 字典的“键”必须是不可变的,键可以是数字、字符串、元组等不可变的数据类型,但不能是列表等可变的数据类型;

二、字典的使用

1、字典的字符索引

字典通过字符索引查找与特定键对应的值,比如:

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(height['乐乐'])  # 打印出乐乐的身高175

2、字典元素修改

字典可以通过对键信息赋值的方式实现增加和修改,如果键已经存在于字典中就是修改对应的键值,如果不存在会增加键值对。

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(height['乐乐'])  # 打印出乐乐的身高175
height['乐乐'] =190  # 修改了乐乐的身高
height['天天'] = 184 # 增加了一个天天同学,身高184
print(height)

3、删除字典元素

删除可以用del 字典名称[k] 的方式,其中k是要删除的键;还可以用字典的pop()方法,pop()方法会返回键对应的值,然后删除这个键值对。

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
del height['乐乐']  # 删除乐乐
print(height.pop('欢欢'))  # 返回欢欢的身高,并删除欢欢
print(height)

你还可以用字典的clear()方法删除字典中所有键值对。

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
height.clear()
print(height)  # 打印出空字典{ }

4、判断键是否在字典中

使用 k in 字典名称 这样的格式查询键是否在字典中,如果存在返回True,否则返回False:

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print('乐乐' in height) # 打印True
print('小张' in height) # 打印False

三、字典的遍历

字典的遍历和列表有所不同,这里我们专门讲解一下字典的各种遍历方法:

1、基本的for循环遍历

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
for i in height:
    print(i)

运行这段代码,你会发现它把乐乐、欢欢、格格、图图这四个键给输出了,但没有返回对应的身高。怎样返回键对应的值呢?可以用上面讲过的方法,用中括号来检索,也可以使用字典的get()方法:

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
for i in height:
    print(i, height.get(i)) # 打印出名字和身高

2、遍历键

使用字典的keys()方法可以获取字典中所有键,它返回的是键构成的序列,所以我们可以遍历它:

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(height.keys())
for i in height.keys():
    print(i) # 只打印出名字

3、遍历值

使用字典的values()方法可以获取字典中所有值,它返回的是值构成的序列,所以我们也可以遍历它:

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(height.values())
for i in height.values():
    print(i) # 只打印出身高

4、同时遍历键和值

使用字典的items()方法可以获取所有的键值对信息,它返回的是键值对构成的序列,在for循环中我们可以分别用两个变量表示键和值,从而直接取出键和值信息:

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(height.items())
for i, j in height.items():
    print(i, j) # 打印出名字和身高

四、其它操作

1、求字典长度

直接用len函数,和列表一样。

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(len(height)) # 打印出键值对数量4

2、随机取元素

可以使用popitem()从字典中随机最后一个键值对,以元组的形式返回,然后将其从字典中删除。

height = {'乐乐': 175, '欢欢': 180, '格格': 165, '图图': 173}
print(height.popitem()) # 打印图图的名字和身高
print(height) # 打印结果中已经没有图图

注意,在Python3.7版本之前,popitem()会删除一个随机项而不是最后一项。

五、课后作业

定义一个字典,保存5位同学乐乐、欢欢、格格、图图和天天的语文、英语、数学成绩,字典以姓名为键,每个键对应的是三门成绩组成的列表,如[99,98,97](成绩你可以随机输入)。请你使用循环遍历字典,并输出每位同学的成绩,要求按以下格式输出:

姓名    语文     数学      英语      总分       平均分
乐乐    99       98       97       294       98.0
……

提示:使用循环遍历字典的键和值,对取出的值使用sum()函数进行求和,进而可以计算平均值。

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

从Scratch到Python 11 异常处理

2023-6-4 16:01:15

综合资讯

从Scratch到Python 12 模块与模块化

2023-6-4 16:03:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索