本页面仅用于内容预览,不包含动画交互效果
讲义加载中,请耐心等待……
Python 编程:从入门到实践Python 编程:从入门到实践(第三版)(第三版)Teacher Name / Email1
与《Python 编程:从入门到实践(第三版)》一书配套使用讲义中的文本及绘图采用署名-非商业性使用-相同方式共享协议CC BY-NC-SA 4.0进行许可引用的网络图片附有超链接,可用于访问来源讨论、意见、答疑、勘误、更新:https://github.com/scruel/pcc_3e_slides作者:@Scruel Tao关于本讲义关于本讲义2
66 字典字典6.1 一个简单的字典6.2 使用字典6.3 遍历字典6.4 嵌套6.5 小结3
6.16.1 一个简单的字典一个简单的字典下面是一个存储了有关特定外星人信息的简单字典,最后两行代码访问并显示信息:alien_0 = {'color': 'green', 'points': 5}print(alien_0['color'])print(alien_0['points'])运行结果green54
6.16.1 一个简单的字典一个简单的字典让我们来看看这个字典:alien_0 = { 'color': 'green', 'points': 5}5
6.16.1 一个简单的字典一个简单的字典让我们来看看这个字典:alien_0 = { 'color': 'green', 'points': 5}print(alien_0['color'])6
6.26.2 使用字典使用字典一对多(一个单词可能有多个意思)一对一(一种菜只有一个价格)比起一词有多义的字典 Python 的字典更像是菜单7
6.26.2 使用字典使用字典字典(dictionary是一系列键值对,使用花括号来标识。每个键都与一个值关联,可以使用键来访问与之关联的值。键在字典中是唯一的,键和值之间用冒号分割8
6.2.16.2.1 访问字典中的值访问字典中的值字典(dictionary是一系列键值对,使用花括号来标识。每个键都与一个值关联,可以使用键来访问与之关联的值。键在字典中是唯一的,键和值之间用冒号分割访问键对应的值:将键放在字典名后面的方括号内来访问其关联值:alien_0 = {'color': 'green'}print(alien_0['color'])运行结果green9
6.2.26.2.2 添加键值对添加键值对字典(dictionary是一系列键值对,使用花括号来标识。每个键都与一个值关联,可以使用键来访问与之关联的值。键在字典中是唯一的,键和值之间用冒号分割添加键值对:依次指定字典名、用方括号括起来的键和与该键关联的值:alien_0 = {'color': 'green'}alien_0['points'] = 5print(alien_0)运行结果{'color': 'green', 'points': 5}10
6.2.36.2.3 从创建一个空字典开始从创建一个空字典开始字典(dictionary是一系列键值对,使用花括号来标识。每个键都与一个值关联,可以使用键来访问与之关联的值。键在字典中是唯一的,键和值之间用冒号分割定义空字典可以用一对空花括号来定义一个空字典,键值对可以分行添加:alien_0 = {}alien_0['color'] = 'green'alien_0['points'] = 5print(alien_0)运行结果{'color': 'green', 'points': 5}11
6.2.46.2.4 修改字典中的值修改字典中的值字典(dictionary是一系列键值对,使用花括号来标识。每个键都与一个值关联,可以使用键来访问与之关联的值。键在字典中是唯一的,键和值之间用冒号分割修改字典中的值:依次指定字典名、用方括号括起来的键和与该键关联的新值:alien_0 = {'color': 'green'}alien_0['color'] = 'yellow'print(alien_0['color'])运行结果yellow12
6.2.56.2.5 删除键值对删除键值对字典(dictionary是一系列键值对,使用花括号来标识。每个键都与一个值关联,可以使用键来访问与之关联的值。键在字典中是唯一的,键和值之间用冒号分割删除字典中的键值对:使用 del 语句将指定字典名中要删除的键相应的键值对彻底删除:alien_0 = {'color': 'green','points': 5}print(alien_0)del alien_0['points']print(alien_0)运行结果{'color': 'green', 'points': 5}{'color': 'green'}13

del 语句让 Python 将键 'points' 从字典 alien_0 中删除,同时删除与这个键关联的值。

输出表明,键 'points' 及其值 5 已被从字典中删除,但其他键值对未受影响。

6.2.66.2.6 由类似的对象组成的字典由类似的对象组成的字典我们可以灵活运用字典来存储想要存储的信息alien_0 = { 'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25,}favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'rust', 'phil': 'python',}一个对象的多种信息多个对象的同一种信息14
6.2.76.2.7 使用使用 get()get() 来访问值来访问值如果指定的键不存在,之前的访问方式将会给出键错误KeyErroralien_0 = {'color': 'green', 'speed': 'slow'}print(alien_0['points'])运行结果Traceback (most recent call last): File "alien_no_points.py", line 2, in <module> print(alien_0['points’]) ~~~~~~~^^^^^^^^^^KeyError: 'points'15
6.2.76.2.7 使用使用 get()get() 来访问值来访问值如果指定的键不存在,之前的访问方式将会给出键错误KeyError我们可以使用 get() 方法来避免错误的发生d.get(key, [default]):根据键获取值16
6.2.76.2.7 使用使用 get()get() 来访问值来访问值如果指定的键不存在,之前的访问方式将会给出键错误KeyError我们可以使用 get() 方法来避免错误的发生d.get(key, [default]):根据键获取值,default 实参是可选的运行结果greenalien_0 = {'color': 'green', 'speed': 'slow'}point_value = alien_0.get('color')print(point_value)可选实参一般用方括号标识17
6.2.76.2.7 使用使用 get()get() 来访问值来访问值如果指定的键不存在,之前的访问方式将会给出键错误KeyError我们可以使用 get() 方法来避免错误的发生d.get(key, [default]):根据键获取值,default 实参是可选的。default 即默认值,用于在键不存在时作替代返回,而不是给出错误。运行结果greenalien_0 = {'color': 'green', 'speed': 'slow'}point_value = alien_0.get('color')print(point_value)18

可选实参一般用方括号表示

6.2.76.2.7 使用使用 get()get() 来访问值来访问值如果指定的键不存在,之前的访问方式将会给出键错误KeyError我们可以使用 get() 方法来避免错误的发生d.get(key, [default]):根据键获取值,default 实参是可选的。default 即默认值,用于在键不存在时作替代返回,而不是给出错误。提供该值时,当键不存在,方法将返回它alien_0 = {'color': 'green', 'speed': 'slow'}point_value = alien_0.get('points', 'Empty')print(point_value)运行结果Empty19

可选实参一般用方括号表示

6.2.76.2.7 使用使用 get()get() 来访问值来访问值如果指定的键不存在,之前的访问方式将会给出键错误KeyError我们可以使用 get() 方法来避免错误的发生d.get(key, [default]):根据键获取值,default 实参是可选的。default 即默认值,用于在键不存在时作替代返回,而不是给出错误。提供该值时,当键不存在,方法将返回它,否则将返回特殊值 None运行结果Nonealien_0 = {'color': 'green', 'speed': 'slow'}point_value = alien_0.get('points')print(point_value)20

None 是一个特殊的值,表示没有相应的值(什么也没有),时常会把他用作占位。值

6.3.16.3.1 遍历所有的键值对遍历所有的键值对d.items() :返回所有键值对的元组视图。favorites = {'jen': 'python', 'edward': 'rust'}for name, language in favorites.items(): print(f"{name} loves {language}.")运行结果jen loves python.edward loves rust.21
6.3.26.3.2 遍历字典中的所有键遍历字典中的所有键d.items() :返回所有键值对的元组视图。d.keys() :返回所有键的列表视图。favorites = {'jen': 'python', 'edward': 'rust'}for name in favorites.keys(): language = favorites[name].title() print(f"{name} loves {language}.")运行结果Jen loves python.Edward loves rust.22

这里只是换了一种方式来遍历字典,结果仍然是相同的。

6.3.36.3.3 按特定的顺序遍历字典中的所有键按特定的顺序遍历字典中的所有键d.items() :返回所有键值对的元组视图。d.keys() :返回所有键的列表视图。要以特定的顺序返回元素,我们可以对返回的键进行排序:favorites = {'jen': 'python', 'edward': 'rust'}for name in sorted(favorites.keys()): language = favorites[name].title() print(f"{name} loves {language}.")运行结果edward loves rust.jen loves python.23
6.3.46.3.4 遍历字典中的所有值遍历字典中的所有值d.items() :返回所有键值对的元组视图。d.keys() :返回所有键的列表视图。d.values():返回所有值的列表视图。favorites = {'jen': 'python', 'edward': 'rust'}for language in favorites.values(): print(language.title())运行结果PythonRust24
6.4.16.4.1 嵌套:字典列表嵌套:字典列表我们可以用在列表中存储字典,来管理成群结队的外星人:alien_0 = {'color': 'green', 'points': 5}alien_1 = {'color': 'yellow', 'points': 10}alien_2 = {'color': 'red', 'points': 15}aliens = [alien_0, alien_1, alien_2]for alien in aliens: print(alien)运行结果{'color': 'green', 'points': 5}{'color': 'yellow', 'points': 10}{'color': 'red', 'points': 15}25

首先创建三个字典,其中每个字典都表示一个外星人。

然后在箭头处,将这些字典都存储到一个名为 aliens 的列表中。

6.4.26.4.2 嵌套:在字典中存储列表嵌套:在字典中存储列表我们可以通过在字典中存储列表,来存储披萨自身的配方信息:pizza = { 'crust': 'thick', 'toppings': ['mushrooms', 'extra cheese']}print(f"{pizza['crust']}-crust pizza " "toppings:")for topping in pizza['toppings']: print(f"\t{topping}")运行结果thick-crust pizza toppings:mushroomsextra cheese1226

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,如何描述顾客点的比萨呢?如果使用列表,只能存储要添加的比萨配料;但如果使用字典,其中的配料列表就只是用来描述比萨的一个方面。

(1 处)与键 'toppings' 关联的值是一个列表,其中存储了顾客要求添加的所有配料。

(2 处)当函数调用中的字符串很长,需要分成多行书写时,可以在合适的位置分行,在每行末尾都加上引号,并且对于除第一行外的其他各行,都在行首加上引号并缩进。这样,Python 将自动合并括号内的所有字符串。

6.4.36.4.3 嵌套:在字典中存储字典嵌套:在字典中存储字典我们可以通过在字典中存储字典,来存储每个用户的信息:users = { 'aeinstein': { 'first': 'albert', 'last': 'einstein', 'location': 'princeton', }, 'mcurie': { 'first': 'marie', 'last': 'curie', 'location': 'paris', },}27

首先定义一个名为 users 的字典,其中包含两个键:用户名 'aeinstein' 和 'mcurie'。

与每个键关联的值都是一个字典,其中包含用户的名、姓和居住地。然

6.4.36.4.3 嵌套:在字典中存储字典嵌套:在字典中存储字典我们可以通过在字典中存储字典,来存储每个用户的信息:for username, user_info in users.items(): print(f"\nUsername: {username}") full_name = f"{user_info['last']} {user_info['first']}" location = user_info['location'] print(f"\tFull name: {full_name.title()}") print(f"\tLocation: {location.title()}")运行结果Username: aeinsteinFull name: Albert EinsteinLocation: PrincetonUsername: mcurieFull name: Marie CurieLocation: Paris124328

然后,遍历字典users(见 1),让 Python 依次将每个键赋给变量 username,并依次将与当前键相关联的字典赋给变量 user_info。

在循环内部,我们首先将用户名打印出来(见 2)。

接下来,开始访问内部的字典(见 3),变量 user_info 是包含用户信息的字典,该字典包含三个键:'first'、'last'和'location'。

对于每个用户,我们都使用这些键来生成整洁的姓名和居住地,然后打印有关用户的简要信息(见4)

6.56.5 小结小结学习了如何定义字典,以及如何使用存储在字典中的信息。学习了如何访问和修改字典中的元素。学习了如何遍历字典中的所有信息、键和值。学习了如何在列表中嵌套字典,以及在字典中嵌套列表或字典在下一章中,我们将学习 while 循环,以及学习如何获取用户的输入。这是激动人心的一章,我们将让程序变得可交互,并能够对用户的输入做出响应。29
课后拓展课后拓展完成书中动手试一试部分内容学习其他创建空字典的方式学习并使用字典推导式可选拓展查询并总结字典相关的常用函数了解并学习集合(set)相关内容学习并尝试使用字典合并运算符尝试将字典推导式和列表推导式结合使用30