Python基础教程——字典

先回顾上一节的学习内容:

接下来做两道小练习,题目中涉及的知识点,是本节要用到的哦。

先来一道选择题,复习一下 Python 中的数据类型。

单选题

下列数据类型分类错误的是( )

A.字符串:‘陈知枫’

B.整数: ‘178’

C.列表:[‘吉他’, ‘篮球’]

D.元组:(‘吉他’, ‘篮球’)

解析:'陈知枫’是一个字符串;[‘吉他’, ‘篮球’]是一个列表;(‘吉他’, ‘篮球’)是一个元组。而选项B是错误的,因为’178’属于字符串。

答案:B

再做一道代码题,复习一下列表和 for 循环、if 语句的综合运用。请筛选出下面列表 score 中大于 60 的数据

#创建一个列表,存储3个数据:
score = [88, 86, 57]
# for循环遍历列表,依次获取列表中的数据:
# if语句筛选出大于60的数据:
# 打印大于60的数据

代码写出来了吗?可以看看我的答案:

#创建一个列表,存储3个数据:
score = [88, 86, 57]
# for循环遍历列表,依次获取列表中的数据:
for number in score:    
# if语句筛选出大于60的数据:    
if number > 60:        
# 打印大于60的数据        
print(number)  

举个例子,这里有一份学员的 Python 成绩表:

'陈知枫': 88'浦欣然': 86'罗鸿朗': 57  

我想编写一个成绩查询的小程序,只要输入学员的姓名,就可以查询到对应的成绩。

下面是我用条件分支语句设计的成绩查询小程序。

本地运行下面的代码,输入成绩表中的姓名,例如陈知枫或浦欣然、罗鸿朗,看看能不能查询到成绩?

# 输入成绩表中的姓名
name = input('请输入姓名:')

# 成绩查询``if name == '陈知枫':

print(name + '成绩为88')
elif name == '浦欣然':

print(name + '成绩为86')
elif name == '罗鸿朗':

print(name + '成绩为57')``else:
print('没有录入该学生的信息!')

查到成绩了吗?

如果班上有 60 个同学,如何查成绩?这个程序的实现效果如何?

你会发现,用上面的条件分支语句查成绩,虽然能实现查询功能,但每录入一个学生信息,就得写一个条件分支语句。一旦学员数量上规模,操作重复麻烦,也不够直观。

那还有其他的方法吗?

试一试字典吧。

# 这是一个字典,存储了两位学生的姓名和成绩
score_table = {'陈知枫': 88, '浦欣然': 86}  

运行下面的代码,输入姓名,如陈知枫或浦欣然,看看程序运行的结果是什么?

score_table = {'陈知枫': 88, '浦欣然': 86}

# 输入成绩表中的姓名
name = input('请输入姓名:')
# 成绩查询
print(score_table[name])

在字典的帮助下,程序是不是更简洁了?

通过姓名直接查成绩。

我今天将从三个方面来介绍字典:

通过讲解字典的基本概念、简单操作及综合应用,让你“全方位”地感受字典的魅力。

掌握字典的基本概念和简单操作很重要哦!只有先把基础概念和用法学得扎实了,这样才能游刃有余地来应对综合应用字典的挑战!

我们先来认识一下字典。

1.字典的基本概念

1.1 什么是字典?

字典是Python中一种常见的数据类型,用于存储具有映射关系的数据。

在我们的日常生活中,很多数据都“组队”出现:如图书编号和图书、商品条码和名称、学生和科目成绩……

每本图书都有自己的编号,每件商品会有专属的条码,每位学生都有对应的科目成绩……这些成对的数据间的对应关系就属于映射关系。

简单地说,你可以把映射关系理解为两个数据间的一种对应关系。

使用字典来存储这些具有映射关系的数据会更简洁,处理起来也更方便。

接下来,我就教你创建一个字典,你先看看字典的语法:

我们用一个花括号{}把这些“成对的”数据括起来,如:{‘陈知枫’: 88,‘浦欣然’: 86},就可以定义一个字典。

在字典中,这些“成对”的数据称为键值对,如:‘陈知枫’: 88就是一个键值对。

字典中的数据以键值对的形式存储,不同键值对之间用英文逗号,隔开。

键值对又由键(key)和值(value)组成,键和值用英文冒号 :连接,键在冒号之前,值在冒号之后。

在字典{‘陈知枫’: 88 ,‘浦欣然’: 86}中,如姓名:'陈知枫、'浦欣然’就属于键,对应的成绩:88、86就属于值。

了解了字典的概念和语法,你来自己动手创建一个字典。

创建一个字典,保存简历中的基本信息。这个字典里有三个键值对:姓名-陈知枫、年龄-21、身高-175.5,并将字典命名为 info。

# 根据要求创建一个字典,并赋值给变量 info
# 打印 info ,看看是否创建成功

温馨提示:键值对之间用逗号、键与值之间用冒号、字符串要打引号。

逗号、冒号和引号不要弄混了,不然会报错哦。如果有问题,可以看看我的答案:

# 根据要求创建一个字典,并赋值给变量 
info  info = {'姓名': '陈知枫', '年龄': 21, '身高': 175.5}
# 打印 info ,看看是否创建成功print(info)  

接下来,我们来观察下字典 info,看看字典中键和值的数据类型有哪些?

1.2 字典中键和值的数据类型

点击下面图片进入讲解页面👇

我们把刚刚探究的字典中键和值的数据类型进行一个总结:

好,了解了字典的基本概念,接下来我们一起来学习对字典的操作。

2. 字典的简单操作

2.1 字典中值的提取

字典中的数据都是以键值对的形式存储,字典中的每个键都是唯一的,而每个键都会映射一个值。

你可以把字典想象成一个“图书馆”,图书馆中每一本图书都对应一个编号,你通过编号就能找到书。

正是因为键和值之间具有映射关系,你才能通过键提取到值。

运行下面的代码,在终端输入成绩表中的姓名,如:陈知枫或浦欣然,看看代码运行的结果。

score_table = {'陈知枫': 88, '浦欣然': 86}name = input('请输入学生姓名:')
print(score_table[name])  

是不是通过姓名就查到了成绩?我们来分析一下取值过程:

首先:我们创建了一个字典,存储两个学员的姓名和成绩。

然后:当在终端输入名字,例如:‘陈知枫’,那么’陈知枫’就被赋值给变量 name,即name = ‘陈知枫’,此时,score_table[name]相当于score_table[‘陈知枫’]。

最后,通过代码:print(score_table[‘陈知枫’]),就打印出了你的成绩:88

这样,通过姓名(键)就获取到了成绩(值)。从字典中提取值的语法是这样的:

是不是觉得语法字典[键]很眼熟?和提取列表中元素的语法列表[索引]类似。

但如果你输入的姓名不在“成绩表”里,程序就会报错哦!

如果键不在字典里,通过字典[键名]的方式来取值时,代码就会报错。但我们不希望它报错,而是给出提示:“成绩表里没有这位同学的成绩”。

那这种时候我们就可以使用get()方法从字典中取值。本地运行下面代码,根据提示输入姓名,如:小明。

score_table = {'陈知枫': 88, '浦欣然': 86}name = input('请输入学生姓名:')
print(score_table.get(name))  

输入不同姓名,例如:陈知枫、浦欣然、小红等,观察通过 get() 方法从字典中取值的结果。

当我们使用 get() 方法来取值时,不管键是否在字典中,程序都不会报错。语法是这样的:

字典.get(键名),例如:score_table.get(‘小明’)。

如果键字典里:score_table.get(‘陈知枫’)就可以取出对应的值:88。

如果键不在字典:score_table.get(‘小明’)运行的结果就会是 None。

None 是 Python 中一个特殊的值,代表“无”的意思。

我们还可以将 字典.get(键名) 和 if 语句结合,来实现一些功能。

本地运行下面的代码,根据提示可以任意输入姓名,如:小红。

score_table = {'陈知枫': 88, '浦欣然': 86}
name = input('请输入学生姓名:')
# 判断键是否在字典里
if score_table.get(name) == None:    
print('成绩表里没有这位同学的成绩')
else:    
print('{}的成绩是{}'.format(name, score\_table.get(name)))  

运行成功后,输入浦欣然再试试试。

我们来分析一下这段代码:

score_table = {'陈知枫': 88, '浦欣然': 86}name = input('请输入学生姓名:')
# 判断键是否在字典里
if score_table.get(name) == None:    
print('成绩表里没有这位同学的成绩')else:    
print('{}的成绩是{}'.format(name, score_table.get(name)))  

当你输入小红,这个键不在字典 score_table 中,score_table.get(‘小红’)运行的结果是:None;

那么:score_table.get(‘小红’) == None条件成立,就执行 if 语句下的代码块:

print(‘成绩表里没有这位同学的成绩’)

当你输入浦欣然时,'浦欣然’在字典 score_table中,所以 score_table.get(‘浦欣然’)运行的结果是:86

那么score_table.get(‘浦欣然’) == None条件不成立,就执行 else 语句下的代码块:

print(‘{}的成绩是{}’.format(name, score_table.get(name))),打印出“浦欣然的成绩是86”。

简单地说,当使用字典.get(键名)这种方法从字典中取值时:

若键在字典里面,直接提取键的值;

若键不在字典里,运行结果是 None。

我们刚刚学了两种取值的方法,来归纳一下:

方法总结完了,做道题目练练手,请从下面的字典 info 中打印出身高数据。

# 创建一个字典来保存个人信息
info = {'性别': '男', '年龄': 21, '身高': 175.5}
# 提取并打印身高数据

提取字典中的值有两种方法,要注意这两种语法的格式,不要弄混啦!有问题可以看看我的答案:

# 第一种:字典[键名]
print(info['身高'])
# 第二种:字典
get(键名)print(info.get('身高')  

接下来,我们来一点有挑战的,你能从下面的字典中取出陈知枫的成绩吗?

score_group = {    '第一组': {'陈知枫': 88, '浦欣然': 86},    '第二组': {'罗鸿朗': 57, '姜信然': 78},    '第三组': {'居俊德': 84, '宿鸿福': 100}}  

点击下面图片进入讲解页面👇

2.2 字典中值的修改

如何修改字典中的值?本地运行下面的代码,观察字典中的值的修改方法。

info = {'性别': '男', '年龄': 21, '身高': 175.5}
# 修改键值对:将你的身高改为176info['身高'] = 176# 打印info,检查一下是否修改成功啦!
print(info)  

打印结果显示,身高数据已经从 175.5 改为了 176 了。

字典中值的修改分两步:

第一步:根据键取出要改的值:info[‘身高’],第二步:赋上新值:info[‘身高’] = 176 ,值就修改成功啦!

来一道练习,运用一下值的修改方法。

在下面的成绩表里,我不小心把陈知枫的成绩(88)写错成(8)啦!请把它改过来。

# 创建一个字典存储学员的姓名和成绩:
score_table = {'陈知枫': 8, '浦欣然': 86}
# 请将你的成绩修改为88
# 打印score_table,检查一下是否修改成功啦!
print(score_table)

对照我的答案看一下。

# 值的修改语法:字典[键名] = 新值score_table['陈知枫'] = 88  

2.3 键值对的增添

学完了字典中值的提取和修改,如果要往字典里添加新的键值对,又应该怎么操作?

本地运行下面的代码,观察键值对增添的语法。

info={'性别':'男', '年龄':21, '身高':175.5} 
#添加键值对:特长是吉他info['特长'] = '吉他'#打印字典info,检查是否添加成功了print(info)  

给字典里添加新的键值对,语法格式是:字典[新键名] = 新值,如:info[‘特长’] = ‘吉他’。

有的时候,我们也可以先创建一个空字典,然后根据实际情况往里添加键值对。

那什么是空字典?

就是字典里面“空空如也”,没有键值对。

#使用一对花括号创建一个空字典,赋值给变量 score_table  score_table = {}  

下面你来试一试,往这个空字典中添加两个键值对:陈知枫-88 浦欣然-86

score_table = {}
# 添加键值对:陈知枫-88

# 添加键值对:浦欣然-86

# 打印 score_table,检查一下是否修改成功啦!
print(score_table)

可以再对照答案检查一下。

score_table = {}
# 添加键值对:陈知枫-88score_table['陈知枫'] = 88
# 添加键值对:浦欣然-86score_table['浦欣然'] = 86
# 打印 score_table,检查一下是否修改成功啦!
print(score_table)  

2.4 键值对的删除

如何删除字典中的键值对?运行下面的代码,观察删除键值对的语法。

info = {'性别':'男', '年龄':21, '身高':175.5, '特长':'吉他'} 
# 删除键值对:特长是吉他del info['特长']
# 检查一下,是否删除成功了!print(info)  

删除字典中的键值对的语法:del 字典[键名],del 是“删除”的英文单词 delete 的缩写哦~

如果你把字典中所有键值对都删除了,那么会剩下什么呢?本地运行下面的代码试一试。

info = {'性别':'男', '年龄':21, '身高':175.5, '特长':'吉他'} 
del info['性别']del info['年龄']del info['身高']del info['特长']
# 打印字典infoprint(info)  

删除了字典info中所有的键值对,结果就只剩下一个空字典{}。

到此,字典的简单操作都已经学完了,我们一起总结一下吧!

值的提取方法有分两种:字典[键名]和字典.get(键名)。若不确定键是否在字典里,用 get()方法更合适,因为它会提示一个 None。

值的修改语法是这样的:字典[键名] = 新值,是不是和增添键值对的语法有点像?字典[新键名] = 新值

删除键值对语法很简单:del 字典[键名] ,一步就搞定。

规律总结完了,来做一道综合型练习。

练习题

# 创建一个字典,存储学员的姓名和成绩:
score_table = {'陈知枫': 88, '浦欣然': 0}
# 提取并打印出浦欣然的成绩
# 将浦欣然的成绩改为:86
# 添加键值对:'罗鸿朗':57
# 删除键值对:'陈知枫':88
# 打印score_table,检查一下是否修改成功啦!

如果有问题,可以看看下面的答案~

# 创建一个字典,存储学员的姓名和成绩:
score_table = {'陈知枫': 88, '浦欣然': 0} 
# 提取并打印出浦欣然的成绩,两种方法都可以。
print(score_table['浦欣然'])
print(score_table.get('浦欣然'))
# 将浦欣然的成绩改为:86  score_table['浦欣然'] = 86
# 添加键值对:'罗鸿朗':57  score_table['罗鸿朗'] = 57
# 删除键值对:'陈知枫':88 del score_table['陈知枫']
# 打印score_table,检查一下是否修改成功啦!
print(score_table)  

以上就是关于字典的简单操作啦!接下来我们要对字典进行综合应用。

3.字典的综合应用

前面我们复习了用 for 循环来遍历列表,依次获取列表中的元素。

如果用 for 循环来遍历字典,那依次获取的是字典中的什么呢?键值对、键还是值?

我们用代码验证一下,本地运行下面的代码,观察运行结果。

score_table = {'陈知枫': 88, '浦欣然': 86, '罗鸿朗': 57}
# for循环遍历字典:
for key in score_table:    print(key)   

从代码运行的结果陈知枫、浦欣然、罗鸿朗可知:通过代码for key in score_table依次获取的是字典中的

那如果要获取值怎么办?

通过刚刚学的语法字典[键名],如:score_table[key]就可以获取值啦!

知道了 for 循环遍历字典的用法,接下来我们解决两个实际问题。

问题一:结合 for 循环和 if 语句,筛选出字典中所有成绩及格的学员名单和分数:

观察下面的代码,先理解每行代码的含义,再运行代码。

score_table = {'陈知枫': 88, '浦欣然': 86, '罗鸿朗': 57}
# for循环遍历字典:
for key in score_table:    
# 判断值是否大于等于60分    
if score_table[key] >= 60:           
# 打印所有合格成绩的学员和成绩        
print('{}的成绩合格:成绩是{}'.format(key, score_table[key]))  

字典中所有成绩及格的学员名单和分数都筛选出来了。

我们来看看这段代码:

首先通过 for 循环遍历字典,然后通过 if 语句对值score_table[key]进行条件判断,最后利用format()方法,将合格学员的名单及所对应的分数打印出来。

我们再来看看第二个问题:请把所有分数大于等于 60 分的学生成绩改为“合格”,低于 60 分的改为“不合格”。

请你补充两行代码,解决上面的问题。提示一下:这会涉及到字典中值的修改哦~

score_table = {'陈知枫': 97, '浦欣然': 86, '罗鸿朗': 57}
# for循环遍历整个字典:
# 条件判断:如果值大于等于60
# 将值改为'合格':
# 否则else:
# 将值改为 '不合格'
# 打印字典
print(score_table)

练习做出来后,打印字典看看是否修改成功啦!下面是我的答案,可以参考一下:

score_table = {'陈知枫': 97, '浦欣然': 86, '罗鸿朗': 57}
# for循环遍历整个字典:
for key in score_table:    
# 条件判断:如果值大于等于60    
if score_table[key] >= 60:        
# 将值改为合格        
score_table[key] = '合格'    
# 否则    
else:        
# 将值改为不合格        
score_table[key] = '不合格'
# 打印字典
print(score\_table)  

对照观察上述的两段代码,我们发现前三行是一样的:

先创建一个字典,接着利用for循环遍历字典,再通过if语句对值筛选。

只不过在不同的问题场景,根据实际情况对值进行不同的操作:

问题一:直接打印筛选出的键与值,

问题二:将筛选出来的值进行修改。

4.总结

关于字典的知识全部学完了,我们用一张图来总结一下今天学过的内容:

我们先认识了字典的基本概念,接着学了字典的四项简单操作,最后介绍了字典的一些综合应用。

目前为止,我们已经学习了六种数据类型,把它归纳一下:

以上就是今天的全部内容啦,也要记得多多复习噢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值