第3 单元
字  典
Gwszw三级1-8.indd 28 2023/9/11 10:48:33

029 
第3 单元 字典
“小帅,我今天参观了‘中国航天展’,感觉探
月工程太伟大了!我们可以通过编程,将探月工程
的一系列科研成果记录下来,方便记忆和查询吗?” 
“小萌,我们可以为嫦娥工程做一本‘字典’, 
在这本字典中,用‘工程名:嫦娥5 号’‘发射时间: 
2020 年11 月24 日’‘目标:月球采样返回’…… 
这样的条目来记录。这样查询探月工程就像翻字典
一样简单啦!” 
数据与数据之间往往存在着有趣的关联,如图3-1 所示的连线题,是记忆
数据之间关联性的常见形式。
图3-1 数据关联性示例
有时候离开了关联,甚至会导致数据失去了其原本的含义。例如,可以
用一个列表表示科目[' 语文',' 数学',' 美术'],用另一个列表表示分数
[85,92,90],如果分数没有与科目建立关联,那么它就没有明确的意义。所以
我们看到的分数表达往往是这样的形式:语文:85, 数学:92, 美术:90。这种
数据之间的关联,被称为“映射”。Python 语言中的字典,就是一种可以存放
这种具有映射关系数据的数据类型。
3.1 字典数据类型
Python 用字典保存具有映射关系的数据。字典相当于保存了两组数据,其
Gwszw三级1-8.indd 29 2023/9/11 10:48:39

跟我学 Python 三级 
中一组数据是关键数据,被称为键(key);另一组数据可通过 key 来访问,被
称为值(value)。字典类型满足了通过书名查询作者、通过国家查询首都、通
过商品查询价格等具有关联关系的信息查询需求。
“学会运用字典,我们就可以通过Python 编程,为‘嫦
娥’和‘玉兔’建立百科知识小卡片了。”
在Python 中,用一对大括号“{ }”存放字典的键值对,其中,键和值之
间用冒号“:”连接,键值对之间用逗号“,”隔开,键值对之间是没有顺序的。
一个字典中可以有0 个或者多个键值对。字典的定义形式如图3-2 所示。
图3-2 字典数据类型结构
Python 的字典类型具有以下特点。
(1)字典是可变的,即字典中的键值对是可以添加、删除的。
(2)字典以键值对为元素,且字典的元素是无序的。
(3)字典中的键不允许重复,但是值可以重复。
(4)字典中的键必须不可变,比如是数字、字符串、元组等不可变数据类
型。字典中的值可以是不可变类型,也可以是列表等可变类型。
“小萌,我们查《新华字典》时,是根据偏旁
部首或者拼音查找到相应的汉字。而Python 的字
典是根据键去查找值,这两者是不是很相似?用
好Python 的字典,我们就能更好地管理信息。”
“老师,Python 中的字典,与我们使用的《新
华字典》都叫‘字典’,它们之间有什么联系吗?”
Gwszw三级1-8.indd 30 2023/9/11 10:48:41 

第3单元 字典
想
想
一
【问题3-1】在集合中,集合的元素不能重复,例如,设置集合s= 
{1,1,2,3},最后集合会自动去除重复的元素,形成的集合形如{1,2,3}。字
典也不允许键的重复,如果有键值重复的字典定义,会出现什么样的结果呢?
d = {'作者':'白居易', '朝代':'唐', '作者':'李白'} 
练练一
【问题3-2】关于字典的叙述,正确的是(  )。
A. 字典的键与值都要保证唯一性,不允许重复
B. 列表可以作为字典的键
C. 由键和值组成的键值对构成,是无序的
D. 由键和值组成的键值对构成,是有序的
3.2 字典的创建及访问
1.创建字典
在程序中创建字典,主要通过下面两种方法。
(1)直接在大括号“{ }”中指定若干组键值对,如果大括号中没有键值对,
即创建一个空字典。如下代码展示了字典的直接创建过程。
>>> d1={} #空字典的创建
>>> type(d1) #确定d1的数据类型
<class 'dict'> #输出d1的类型,即字典类型名为'dict' 
Gwszw三级1-8.indd 31 2023/9/11 10:48:42 

跟我学Python三级
>>> d2 = {2022:'北京',2028:'罗马',2028:'洛杉矶'} 
>>> d2 
{2022: '北京', 2028: '洛杉矶'} #当键值重复时,保留最后一个键值对
>>> d3 = {('A','B'):[90,80],'C':70} 
>>> d3 #元组是不可变类型,可以作为键;列表是可变类型,可以作为值
{('A', 'B'): [90, 80], 'C': 70} 
(2)使用内置函数dict( ) 创建字典。若dict( ) 不加参数,则创建一个空字
典,若参数具有映射的参数,则建立与映射关系相一致的具有键值对的字典。
>>> dict1 = dict() #用dict()函数创建空字典
>>> print(dict1) 
{} 
>>> dict2 = dict(火箭 = '长征5号',高度=57) # 具有映射关系的参数
# 创建字典
>>> dict2 
{'火箭': '长征5号', '高度': 57} 
>>> dict3 = dict([('湖泊','青海湖'),('平均水深(米)',21)]) 
>>> dict3 #实现了将序列创建为字典
{'湖泊': '青海湖', '平均水深(米)': 21} 
“字典和集合都是无序的,字典的键以及集合
的元素都具有唯一性且不能是可变的数据类型。
所以集合本质上就是没有值(value)的字典。”
“老师,Python 中的字典与集合都用大括号
‘{}’表示,它们之间存在着联系吗?”
2.访问字典
生活中人们使用字典主要是用于查找生字,Python 中使用字典数据类型,
一个主要的目的也是获得字典中的信息,即“访问”字典。Python 中字典的访
Gwszw三级1-8.indd 32 2023/9/11 10:48:42 

第3单元 字典
问主要有以下几种方式。
(1)根据键访问值。
字典中每个元素表示一种映射关系,将提供的“键”作为索引,可以访
问对应的值,如果字典中不存在这个“键”,则会返回错误信息。例如下列代
码,演示了对存在于字典中键的访问,以及访问字典中不存在的键而引发的
异常。
d ={'杭州':'西湖', '北京':'长城', '西安':'兵马俑'} 
print("(1)",end =":") 
print(d['北京']) #'北京'是字典中存在的键
print("(2)",end =":") 
print(d['天津']) #'天津'是字典中不存在的键
执行结果如下。
(1):长城
(2):Traceback (most recent call last): 
File "Demo.py", line 5, in <module> 
print(d['天津']) 
KeyError: '天津' 
(2)使用get()方法访问值。
为了避免在访问字典时,因为访问的某个键不在字典中而引发异常,可通
过get( ) 方法进行值的访问。get( ) 方法的语法格式如下。
dict.get([key[,default = None]) 
其中,key 为要访问的键,若该键存在,则返回对应的值;若该键不存在,
则返回默认值。可自行设置需要输出的默认值,default=None 代表不指定默认
值时,默认值为None。下列代码展示了利用get( ) 方法访问字典的情形。
d ={'杭州':'西湖', '北京':'长城', '西安':'兵马俑'} 
print("(1):",d. get('北京')) #访问存在的键
print("(2):",d. get('天津')) #访问不存在的键,默认值为None 
print("(3):",d. get('天津','天津标识景区未记录')) #自行设定默认值
Gwszw三级1-8.indd 33 2023/9/11 10:48:42 

跟我学Python三级
运行结果如下。
(1): 长城
(2): None 
(3): 天津标识景区未记录
“上面的例子‘访问’到的都是字典的值,我
们有没有方法可以访问字典的键呢?”
“其实呀,获取字典中键、值以及键值对的方
法是很多的。就拿‘访问’键来说,我们通过循环,
进行字典的遍历,就能够轻松实现了。”
for 循环可以遍历字符串、列表、元组,同样也可以遍历字典。在遍历字典时,
每次的循环变量其实就是字典的索引值,就是键。以下列代码为例。
d ={'杭州':'西湖', '北京':'长城', '西安':'兵马俑'} 
for i in d: 
print(i) 
代码的执行结果如下。
杭州
北京
西安
想
想
一
【问题3-3】用for 循环遍历字典,可以获取键的信息,既然键与值是
映射的关系,那么能否通过for 循环遍历字典,获得键对应的值的信息呢?请
仿照上面的代码,尝试自己动手编程实现吧!
Gwszw三级1-8.indd 34 2023/9/11 10:48:43 

第3单元 字典
3.3 键值对数据处理
字典除了支持创建和访问等基本操作,作为可变的映射数据类型,字典还
拥有丰富的键值对数据的处理能力。
字典除了可以通过键作为索引访问值、通过遍历的方法访问键以外,还提
供了三种视图对象,通过它们可以动态访问字典中的数据。这三种视图的获取
方法如图3-3 所示。
图3-3 获取字典视图对象的三种方法
若字典名为d,则d. keys( )、d. values( )、d. items( ) 都是可以使用for 循
环遍历的可迭代的对象。下列代码用于测试输出上述三种视图对象的类型名。
d = {} #创建空字典
print("d. keys的类型名为{}".format(type(d. keys()))) 
print("d. valus的类型名为{}".format(type(d. values()))) 
print("d. items的类型名为{}".format(type(d. items()))) 
在输出结果中可以清晰地呈现三种视图的类型名。
d. keys的类型名为<class 'dict_keys'> 
d. valus的类型名为<class 'dict_values'> 
d. items的类型名为<class 'dict_items'> 
dbook = {' 书名':'平凡的世界','作者':' 路遥','出版年':1990} 
是一个定义好的字典,若有如下三个输出语句:
Gwszw三级1-8.indd 35 2023/9/11 10:48:46 

跟我学Python三级
print(dbook.keys()) 
print(dbook.values()) 
print(dbook.items()) 
则得到如下输出结果。
dict_keys(['书名', '作者', '出版年']) 
dict_values(['平凡的世界', '路遥', 1990]) 
dict_items([('书名', '平凡的世界'),('作者', '路遥'),('出版年', 
1990)]) 
可见三种视图返回值均为列表,items( ) 方法返回的是列表,它的列表元
素为键与值构成的元组。
字典作为可变数据类型,其键值对信息均可进行添加、修改、删除等操作。
字典中的键值对添加及修改可以通过赋值的方式直接实现。
若有字典cd ={'北京':'颐和园'},执行语句cd['北京'] = '故宫'后,
字典中键'北京'对应的值将被改为'故宫';执行语句cd['天津'] = '盘山' 
后,键值对'天津':'盘山'将被添加到字典cd 中。
字典的删除类命令及方法如表3-1 所示。
表3-1 字典删除的命令及方法
方法/ 命令说明
示例
基于字典 d = {'语文':90,'数学':95} 
del 
删除字典或键值对的
命令
(1)del d #直接删除整个字典d 
(2)del d['语文'] #删除'语文':90 
(3)del d['英语'] #将引发KeyError错误
pop() 
删除指定键值对,至
少有1个参数
(1)d. pop('数学') 
#返回值95,并删除'数学':95 键值对
(2)d. pop('英语','查找不到') 
#'英语'不是字典中的键,返回'查找不到' 
popitem() 
随机删除某个键值对
的方法,无参数
d. popitem() 
返回结果有可能为('数学', 95)。当字典为空时,
再运行popitem()会引发KeyError错误
clear() 
清空字典中所有键值
对的方法,无参数
d. clear() 
执行后d将成为一个空字典
Gwszw三级1-8.indd 36 2023/9/11 10:48:46 

第3单元 字典
练练一
【问题3-4】阅读下列代码,请写出运行结果。
d = {1:'a', 2:'b', 3:'c'} 
del d[1] 
d[1] = 'x' 
del d[2] 
print(d) 
普遍运用于组合数据类型的len( ) 函数、in 与not in 等成员运算符,同样
适用于字典数据类型。
len( ) 函数若以字典为参数,则返回字典的长度,即字典中键值对的数量。
而成员运算仅适用于判断键是否在字典中,返回值为True 或者False。
上述操作是支持字典类型的主要命令及方法,Python 更多关于“字典”
的奥秘,等着大家去探索!
“本单元完成了对字典的学习。字典是Python 唯一的映
射类型。字典的访问、遍历、修改、维护等都是围绕键值
对展开的。键的唯一性决定了键不能够用可变类型数据来
表达。
在课后,请同学们注意对比列表、元组、集合,深入理
解字典的特性,为后续课程学习打牢基础。”
习  题
1. 下列选项中,不能
3 3 
生成空字典的是(  )。
A. { } B. dict( ) C. {[ ]} D. dict([ ]) 
2. 运行下列代码,输出结果是(  )。
Gwszw三级1-8.indd 37 2023/9/11 10:48:47 

跟我学Python三级
dc = {'中国':'黄河', '埃及':'尼罗河'} 
print(len(dc)) 
A. 2 B. 3 C. 4 D. 5 
3. 下列对字典的定义,错误
3 3 
的是(  )。
A. dc = {'姓名':'张柔', '年龄':12} 
B. dc = {(1,2):'元组','abc':'字符串'} 
C. dc = {{1,2}:'集合',12:'数字'} 
D. dc = {12.3:12,35.6:36} 
4. 运行下列代码,输出结果是(  )。
d_demo ={"任务":"嫦娥3号", "发射年份":2013, "目标":"巡月"} 
print(d_demo.values()) 
A. dict_values(['嫦娥3 号', 2013, '巡月']) 
B. dict_values(['任务', '发射年份', '目标']) 
C. dict_keys(['嫦娥3 号', 2013, '巡月']) 
D. dict_keys(['任务', '发射年份', '目标']) 
5. 已知字典定义为d_lw = {'小桔灯':'冰心', '故乡':'鲁迅', '春
蚕':'茅盾'},下列语句能够正确执行的是(  )。
A. print(d_lw.get( )) B. print(d_lw.pop( )) 
C. print(d_lw.popitem( )) D. print(d_lw.del( )) 
6. 已知字典dic1 = {'中国':'北京', '法国':'巴黎', '英国':'伦
敦'},执行下列语句,输出结果中不包括
3 3 3 '北京'的是(  )。
A. dic1.get('中国') B. dic1.keys( ) 
C. dic1.values( ) D. dic1.items( ) 
7. 运行下列代码,输出结果是(  )。
d_demo = {'语文':90, '数学':75, '历史':80} 
print(80 in d_demo) 
A. 1 B. 0 C. True D. False 
8. 运行下列代码,输出结果是(  )。
d_1 = {'a':2, 'b':4} 
d_2 = d_1 
Gwszw三级1-8.indd 38 2023/9/11 10:48:47 

第3单元 字典
d_1['a'] = 5 
print(d_1['a']+d_2['a']) 
A. 4 B. 6 C. 7 D. 10 
9. 以下关于字典的描述,错误
3 3 
的是(  )。
A. 字典中元素以键信息为索引访问
B. 字典长度是可变的
C. 字典是键值对的集合
D. 字典中的键可以对应多个值信息
10. 运行下面代码,输出结果是(  )。
d ={'匆匆':'诗歌', '母亲':'散文', '边城':'小说'} 
print(d['母亲'], d. get('母亲', '随笔')) 
A. 散文随笔 B. 散文散文 C. 随笔随笔 D. 散文诗歌
11. 编程题
有字典定义为:dlog = {'user':'135aba','guest':'test001'}。
用户输入用户名和密码,当用户名与密码和字典中的键值对一致时,显示
“登录成功”,否则显示“登录失败”,若登录失败,允许重复输入三次。
输入格式:
在两行中分别输入用户名和密码。
输出格式:
"登录成功"或"登录失败" 
Gwszw三级1-8.indd 39 2023/9/11 10:48:48