字典是Python中一种重要的数据结构,它让我们能够将相关联的信息有效地组织和管理起来。 通过字典,我们可以建立信息之间的对应关系,并且能够快速地检索和修改这些信息。 字典的强大之处在于它几乎可以存储无限量的数据,我们还可以通过循环来遍历字典中的数据。 此外,字典还支持嵌套结构,也就是说我们可以在列表中存储字典,在字典中存储列表,甚至在字典中嵌套其他字典。
掌握字典的使用方法,将帮助我们更加准确地模拟现实世界中的各种对象和关系。比如我们可以创建一个字典来表示一个学生的信息,其中可以包含姓名、年龄、专业、成绩等任意多的属性。 字典适合存储任何两种可以相互匹配的信息,例如词汇与释义的对应关系、人名与电话号码的对应关系、商品与价格的对应关系等等。

让我们通过一个具体的例子来认识字典。假设我们正在开发一个图书管理系统,需要存储一本图书的基本信息:
|book_info = {'title': '红楼梦', 'price': 45} print(book_info['title']) print(book_info['price'])
这个字典book_info保存了图书的标题和价格信息。最后两行代码访问并显示了这些信息:
|红楼梦 45
字典在Python中是键值对的集合。每个键都与一个值相连接,我们可以使用键来访问与之关联的值。 键对应的值可以是数字、字符串、列表,甚至是另一个字典。实际上,Python中任何可以创建的对象都可以作为字典中的值。
Python中的字典用花括号{}包围,其中包含一系列键值对,如前面的例子所示:
|book_info = {'title': '红楼梦', 'price': 45}
键值对是一组相互关联的值。当我们提供一个键时,Python会返回与该键关联的值。每个键通过冒号与其值相连接,各个键值对之间用逗号分隔。字典中可以存储任意多个键值对。
最简单的字典只包含一个键值对,如下面这个修改版的图书字典:
|book_info = {'title': '红楼梦'}
这个字典只存储了图书的一条信息,即图书的标题。字符串'title'是这个字典中的一个键,与之关联的值是'红楼梦'。
要获取与键关联的值,需要指定字典名称,然后将键放在方括号内:
|book_info = {'title': '红楼梦'} print(book_info['title'])
这会返回字典book_info中键'title'对应的值:
|红楼梦
字典中可以包含无限个键值对。例如,这里是包含两个键值对的图书字典:
|book_info = {'title': '红楼梦', 'price': 45}
现在我们可以访问图书的标题或价格。如果用户想要购买这本书,我们可以通过以下代码查询价格:
|book_info = {'title': '红楼梦', 'price': 45} current_price = book_info['price'] print(f"这本书的价格是{current_price}元")
字典定义后,代码从字典中提取键'price'对应的值,并将其赋给变量current_price。然后打印一条关于图书价格的信息:
|这本书的价格是45元
每当需要查询图书价格时,都可以运行这段代码来获取价格信息。
字典是动态结构,我们可以随时向字典中添加新的键值对。要添加新的键值对,需要指定字典名称,后跟方括号中的新键以及新值。
让我们向book_info字典添加两条新信息:图书的出版年份和库存数量。
|book_info = {'title': '红楼梦', 'price': 45} print(book_info) book_info['year'] = 2020 book_info['stock'] = 15 print(book_info)
我们首先定义了一直在使用的字典,然后打印这个字典以显示其当前信息。接着我们向字典添加了新的键值对:键'year'和值2020,以及键'stock'和值15。当我们打印修改后的字典时,可以看到新增的两个键值对:
|{'title': '红楼梦', 'price': 45} {'title': '红楼梦', 'price': 45, 'year': 2020, 'stock': 15}
字典的最终版本包含四个键值对,原来的两个指定了标题和价格,新的两个指定了出版年份和库存数量。
需要注意的是,从Python 3.7开始,字典会保持其定义时的顺序。当你打印字典或遍历其元素时,会看到元素按照添加到字典中的顺序排列。
有时候,从空字典开始然后逐个添加项目是很方便的,甚至是必要的。要开始填充空字典,可以定义一个包含空花括号的字典,然后在各行中添加每个键值对。例如,以下是使用这种方法构建book_info字典的方式:
|book_info = {} book_info['title'] = '红楼梦' book_info['price'] = 45 print(book_info)
这里我们定义了一个空的book_info字典,然后向其中添加标题和价格值。结果就是我们在前面例子中一直使用的字典:
|{'title': '红楼梦', 'price': 45}
通常,当在字典中存储用户提供的数据时,或者当编写自动生成大量键值对的代码时,会使用空字典。
要修改字典中的值,需要指定字典名称和方括号中的键,然后指定要与该键关联的新值。例如,考虑一本图书随着时间推移价格发生变化的情况:
|book_info = {'title': '红楼梦'} print(f"这本书是《{book_info['title']}》") book_info['title'] = '西游记' print(f"这本书现在是《{book_info['title']}》")
我们首先定义了一个只包含图书标题的字典,然后将与键'title'关联的值改为'西游记'。输出显示图书标题确实已经改变:
|这本书是《红楼梦》 这本书现在是《西游记》
让我们看一个更有趣的例子,跟踪一个可以以不同速度移动的游戏角色的位置。我们将存储一个表示角色当前速度的值,然后使用它来确定角色应该向右移动多远:
|player = {'x_position': 0, 'y_position': 25, 'speed': '中等'} print(f"初始位置:{player['x_position']}") # 根据角色当前速度确定移动距离 if player['speed'] == '慢速': x_increment = 1 elif player['speed'] ==
我们首先定义了一个具有初始x位置、y位置和速度为'中等'的角色。为了简化,我们省略了颜色和分数值,但如果包含这些键值对,这个例子也会以同样的方式工作。
if-elif-else语句块决定角色应该向右移动多远,并将这个值赋给变量x_increment。如果角色的速度是'慢速',它向右移动一个单位;如果速度是'中等',它移动两个单位;如果是'快速',它移动三个单位。计算出增量后,将其加到x_position的值上,结果存储在字典的x_position中。
因为这是一个中等速度的角色,它的位置向右移动了两个单位:
|初始位置:0 新位置:2
这种技术非常有用:通过改变角色字典中的一个值,我们可以改变角色的整体行为。例如,要将这个中等速度的角色变成快速角色,可以添加这行代码:
|player['speed'] = '快速'
下次代码运行时,if-elif-else块会给x_increment分配一个更大的值。
当不再需要存储在字典中的某个信息时,可以使用del语句完全删除键值对。del语句只需要字典名称和要删除的键。
例如,让我们从book_info字典中删除键'price'及其值:
|book_info = {'title': '红楼梦', 'price': 45} print(book_info) del book_info['price'] print(book_info)
这行代码告诉Python从字典book_info中删除键'price',同时删除与该键关联的值。输出显示键'price'及其值45已从字典中删除,但字典的其余部分不受影响:
|{'title': '红楼梦', 'price': 45} {'title': '红楼梦'}
请注意,被删除的键值对是永久删除的。
前面的例子涉及存储一个对象(一本图书)的不同类型信息。我们也可以使用字典来存储许多对象的同一种信息。例如,假设我们想要调查一些人,询问他们最喜欢的编程语言是什么。字典对于存储简单调查的结果很有用:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', }
如你所见,我们将一个较大的字典分解成几行。每个键是参与调查的人的姓名,每个值是他们选择的语言。当你知道需要多行来定义字典时,在开始花括号后按回车键,然后缩进下一行一级(四个空格),并编写第一个键值对,后跟逗号。从这一点开始,当你按回车键时,文本编辑器应该自动缩进所有后续的键值对以匹配第一个键值对。
完成字典定义后,在最后一个键值对后的新行上添加结束花括号,并缩进一级,使其与字典中的键对齐。在最后一个键值对后包含逗号也是好的做法,这样你就准备好在下一行添加新的键值对了。
要使用这个字典,给定参与调查的人的姓名,我们可以轻松查找他们最喜欢的语言:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } language = favorite_languages['小红'].title() print(f"小红最喜欢的语言是{language}。")
要查看小红选择了哪种语言,我们请求值:favorite_languages['小红']
我们使用这种语法从字典中提取小红最喜欢的语言,并将其赋给变量language。在这里创建新变量使得print()调用更加清晰。输出显示小红最喜欢的语言:
|小红最喜欢的语言是C。
使用方括号中的键从字典中检索你感兴趣的值可能会导致一个潜在问题:如果你请求的键不存在,你会得到错误。
让我们看看当你请求一本没有设置价格值的图书的价格时会发生什么:
|book_info = {'title': '红楼梦', 'stock': 15} print(book_info['price'])
这会导致回溯,显示KeyError:
|Traceback (most recent call last): File "book_no_price.py", line 2, in <module> print(book_info['price']) KeyError: 'price'
对于字典,你可以使用get()方法设置一个默认值,如果请求的键不存在,将返回该默认值。
get()方法要求将键作为第一个参数。作为第二个可选参数,你可以传递在键不存在时要返回的值:
|book_info = {'title': '红楼梦', 'stock': 15} price_value = book_info.get('price', '未设置价格') print(price_value)
如果字典中存在键'price',你会得到相应的值。如果不存在,你会得到默认值。在这种情况下,price不存在,我们得到一个清晰的消息而不是错误:
|未设置价格
如果你请求的键可能不存在,考虑使用get()方法而不是方括号记法。
如果你在调用get()时省略第二个参数,而键不存在,Python将返回值None。特殊值None意味着"不存在值"。这不是错误:它是一个特殊值,用来表示值的缺失。
一个Python字典可以包含少数几个键值对,也可以包含数百万个键值对。由于字典可以包含大量数据,Python允许我们遍历字典。字典可以用多种方式存储信息,因此存在几种不同的遍历方法。我们可以遍历字典的所有键值对、只遍历键,或只遍历值。
在探索不同的遍历方法之前,让我们考虑一个新的字典,设计用来存储网站用户的信息。以下字典将存储一个人的用户名、姓和名:
|user_info = { 'username': 'zhangsan', 'first_name': '三', 'last_name': '张', }
根据本章前面学到的内容,你可以访问user_info的任何单个信息。但如果你想查看这个用户字典中存储的所有内容怎么办?为此,你可以使用for循环遍历字典:
|user_info = { 'username': 'zhangsan', 'first_name': '三', 'last_name': '张', } for key, value in user_info.items(): print(f"\n键:{key}") print(f"值:{value}")
要为字典编写for循环,需要创建两个变量的名称,这两个变量将保存每个键值对中的键和值。你可以为这两个变量选择任何名称。
for语句的后半部分包括字典名称,后跟方法items(),该方法返回键值对列表。然后for循环将这些对中的每一对分配给提供的两个变量。在前面的例子中,我们使用变量来打印每个键,然后是关联的值。第一个print()调用中的"\n"确保在输出中每个键值对之前插入空行:
|键:username 值:zhangsan 键:first_name 值:三 键:last_name 值:张
遍历所有键值对对于像我们之前的favorite_languages例子这样的字典特别有效,这种字典为许多不同的键存储相同类型的信息。如果你遍历favorite_languages字典,你会得到字典中每个人的姓名和他们最喜欢的编程语言。因为键总是指一个人的姓名,值总是一种语言,我们在循环中使用变量name和language而不是key和value。这使得更容易理解循环内部发生的事情:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } for name, language in favorite_languages.items(): print(f"{name.title()}最喜欢的语言是{language.title()}。")
这段代码告诉Python遍历字典中的每个键值对。当它遍历每一对时,键被分配给变量name,值被分配给变量language。这些描述性名称使得更容易看出print()调用在做什么。
现在,仅用几行代码,我们就可以显示调查的所有信息:
|小明最喜欢的语言是Python。 小红最喜欢的语言是C。 小刚最喜欢的语言是Java。 小丽最喜欢的语言是Python。
即使我们的字典存储了一千甚至一百万人的调查结果,这种类型的循环也同样有效。
当你不需要使用字典中的所有值时,keys()方法很有用。让我们遍历favorite_languages字典并打印参与调查的每个人的姓名:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } for name in favorite_languages.keys(): print(name.title())
这行代码告诉Python从字典favorite_languages中提取所有键,并将它们逐一分配给变量name。输出显示参与调查的每个人的姓名:
|小明 小红 小刚 小丽
遍历键实际上是遍历字典时的默认行为,所以如果你写了for name in favorite_languages:而不是for name in favorite_languages.keys():,这段代码会产生完全相同的输出。
如果它使你的代码更易于阅读,你可以选择明确使用keys()方法,或者如果你愿意可以省略它。
你可以在循环内部使用当前键访问你关心的任何键的关联值。让我们打印一条消息给几个朋友,关于他们选择的语言。我们将像以前一样遍历字典中的姓名,但当姓名匹配我们的一个朋友时,我们将显示关于他们最喜欢语言的消息:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } friends = ['小丽', '小红'] for name in favorite_languages.keys(): print(name.title()) if name in friends: language
我们创建了一个我们想要打印消息的朋友列表。在循环内部,我们打印每个人的姓名。然后我们检查我们正在处理的姓名是否在朋友列表中。如果是,我们使用字典名称和当前的name值作为键来确定这个人最喜欢的语言。然后我们打印一个特殊的问候,包括对他们选择的语言的引用。
每个人的姓名都被打印出来,但我们的朋友收到特殊消息:
|小明 小红 小红,我看到你喜欢C! 小刚 小丽 小丽,我看到你喜欢Python!
你也可以使用keys()方法来查看是否调查了特定的人。这次,让我们看看是否调查了小华:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } if '小华' not in favorite_languages.keys(): print("小华,请参加我们的调查!")
keys()方法不只是用于循环:它实际上返回所有键的列表,这行代码简单地检查'小华'是否在这个列表中。因为她不在,所以打印一条消息邀请她参加调查:
|小华,请参加我们的调查!
从Python 3.7开始,遍历字典会按照插入的顺序返回项目。不过,有时你会想要以不同的顺序遍历字典。
一种方法是在for循环中对返回的键进行排序。你可以使用sorted()函数获得按顺序排列的键的副本:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } for name in sorted(favorite_languages.keys()): print(f"{name.title()},感谢您参加调查。")
这个for语句类似于其他for语句,除了我们在dictionary.keys()方法周围包装了sorted()函数。这告诉Python列出字典中的所有键并在遍历之前对该列表进行排序。输出显示参与调查的每个人,姓名按顺序显示:
|小丽,感谢您参加调查。 小刚,感谢您参加调查。 小红,感谢您参加调查。 小明,感谢您参加调查。
如果你主要对字典包含的值感兴趣,可以使用values()方法返回不带任何键的值列表。例如,假设我们只想要编程语言调查中选择的所有语言列表,而不要选择每种语言的人的姓名:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } print("提到了以下语言:") for language in favorite_languages.values(): print(language.title())
这里的for语句从字典中提取每个值并将其分配给变量language。当这些值被打印时,我们得到所有选择的语言列表:
|提到了以下语言: Python C Java Python
这种方法从字典中提取所有值而不检查重复。这对于少量值可能工作得很好,但在有大量受访者的调查中,这会导致非常重复的列表。要查看每种选择的语言而不重复,我们可以使用集合。集合是一个集合,其中每个项目必须是唯一的:
|favorite_languages = { '小明': 'python', '小红': 'c', '小刚': 'java', '小丽': 'python', } print("提到了以下语言:") for language in set(favorite_languages.values()): print(language.title())
当你用set()包装包含重复项的列表时,Python识别列表中的唯一项并从这些项构建集合。我们使用set()来提取favorite_languages.values()中的唯一语言。
结果是参与调查的人提到的无重复语言列表:
|提到了以下语言: Java C Python
随着你继续学习Python,你会经常发现语言的内置功能能帮助你精确地处理数据。
你可以使用花括号直接构建集合,并用逗号分隔元素:
|>>> languages = {'python', 'java', 'python', 'c'} >>> languages {'java', 'python', 'c'}
很容易将集合误认为字典,因为它们都用花括号包围。当你看到花括号但没有键值对时,你可能在看一个集合。与列表和字典不同,集合不以任何特定顺序保留项目。
有时你会想要在列表中存储多个字典,或者在字典中存储一个项目列表作为值。这称为嵌套。你可以在列表中嵌套字典,在字典中嵌套项目列表,甚至在字典中嵌套字典。嵌套是一个强大的功能,正如以下例子将演示的那样。
前面的book_info字典包含一本书的各种信息,但它没有空间存储第二本书的信息,更不用说整个图书库了。我们如何管理图书集合?一种方法是创建一个图书列表,其中每本书都是包含该书信息的字典。例如,以下代码构建了三本书的列表:
|book_0 = {'title': '红楼梦', 'price': 45} book_1 = {'title': '西游记', 'price': 38} book_2 = {'title': '水浒传', 'price': 42} books = [book_0, book_1, book_2] for book in books: print
我们首先创建三个字典,每个代表不同的书。然后我们将这些字典中的每一个存储在名为books的列表中。最后,我们遍历列表并打印出每本书:
|{'title': '红楼梦', 'price': 45} {'title': '西游记', 'price': 38} {'title': '水浒传', 'price': 42}
更现实的例子会涉及更多的书,代码会自动生成每本书。在下面的例子中,我们使用range()创建30本书的集合:
|# 创建一个存储图书的空列表 books = [] # 创建30本书 for book_number in range(30): new_book = {'title': '程序设计基础', 'price': 68, 'stock': 5} books.append(new_book) # 显示前5本书 for book in books[:5]: print(book) print(
这个例子开始时有一个空列表来保存将要创建的所有书。range()返回一系列数字,这只是告诉Python我们想要循环重复多少次。每次循环运行时我们创建一本新书,然后将每本新书添加到列表books中。我们使用切片打印前五本书,然后打印列表的长度以证明我们确实生成了30本书的完整集合:
|{'title': '程序设计基础', 'price': 68, 'stock': 5} {'title': '程序设计基础', 'price': 68, 'stock': 5} {'title': '程序设计基础', 'price': 68, 'stock': 5} {'title': '程序设计基础', 'price': 68, 'stock': 5} {'title': '程序设计基础', 'price': 68,
这些书都有相同的特征,但Python将每一本都视为单独的对象,这允许我们单独修改每本书。
你可能会想如何处理这样一组书?想象一下图书管理系统的某个方面,随着时间推移,一些书的价格会发生变化。当需要更改价格时,我们可以使用for循环和if语句来更改书的价格。例如,要将前三本书的价格改为60元,我们可以这样做:
|# 创建一个存储图书的空列表 books = [] # 创建30本书 for book_number in range(30): new_book = {'title': '程序设计基础', 'price': 68, 'stock': 5} books.append(new_book) for book in books[:3]: if book['price'] == 68
因为我们想要修改前三本书,所以我们遍历只包括前三本书的切片。现在所有的书价格都是68元,但这不会总是这样,所以我们写一个if语句来确保我们只修改价格为68元的书。如果书的价格是68元,我们将价格改为60元,库存改为8,如下面的输出所示:
|{'title': '程序设计基础', 'price': 60, 'stock': 8} {'title': '程序设计基础', 'price': 60, 'stock': 8} {'title': '程序设计基础', 'price': 60, 'stock': 8} {'title': '程序设计基础', 'price': 68, 'stock': 5} {'title': '程序设计基础', 'price': 68,
你可以通过添加elif块来扩展这个循环,该块将价格为60元的书变成价格为55元的书。
当每个字典包含关于一个对象的多种信息时,在列表中存储许多字典是常见的。例如,你可能为网站上的每个用户创建一个字典,并将各个字典存储在名为users的列表中。列表中的所有字典都应该有相同的结构,这样你就可以遍历列表并以相同的方式处理每个字典对象。
有时将列表放在字典中而不是将字典放在列表中是有用的。例如,考虑一下你如何描述某人正在订购的披萨。如果你只使用列表,你真正能存储的只是披萨配料的列表。使用字典,配料列表可以只是你描述的披萨的一个方面。
在下面的例子中,为每个披萨存储两种信息:饼皮类型和配料列表。配料列表是与键'toppings'关联的值。要使用列表中的项目,我们给出字典名称和键'toppings',就像字典中的任何值一样。我们不是返回单个值,而是得到一个配料列表:
|# 存储正在订购的披萨信息 pizza = { 'crust': '厚饼', 'toppings': ['蘑菇', '额外奶酪'], } # 总结订单 print(f"您订购了{pizza['crust']}披萨," "配料如下:") for topping in pizza['toppings']: print("\t" +
我们首先创建了一个字典,保存已订购披萨的信息。字典中的一个键是'crust',关联的值是字符串'厚饼'。下一个键'toppings'的值是一个列表,存储所有要求的配料。我们总结订单后开始制作披萨。当你需要在print()调用中分解长行时,选择适当的断点来分解要打印的行,并以引号结束该行。缩进下一行,添加开始引号,并继续字符串。Python会自动组合它在括号内找到的所有字符串。为了打印配料,我们写了一个for循环。要访问配料列表,我们使用键'toppings',Python从字典中获取配料列表。
以下输出总结了我们计划制作的披萨:
|您订购了厚饼披萨,配料如下: 蘑菇 额外奶酪
每当你想要在字典中将多个值与单个键关联时,可以在字典中嵌套列表。在前面编程语言最爱的例子中,如果我们要将每个人的回答存储在列表中,人们可以选择多个最喜欢的语言。当我们遍历字典时,与每个人关联的值将是一个语言列表而不是单个语言。在字典的for循环内部,我们使用另一个for循环来遍历与每个人关联的语言列表:
|favorite_languages = { '小明': ['python', 'java'], '小红': ['c'], '小刚': ['java', 'go'], '小丽': ['python', 'javascript'], } for name, languages in favorite_languages.items(): print(f"\n{name.title()}最喜欢的语言是:") for
如你所见,与每个姓名关联的值现在是一个列表。注意有些人有一种最喜欢的语言,而其他人有多种最喜欢的语言。当我们遍历字典时,我们使用变量名languages来保存字典中的每个值,因为我们知道每个值都是一个列表。在主字典循环内部,我们使用另一个for循环遍历每个人的最喜欢语言列表。
现在每个人都可以列出他们喜欢的任意多种语言:
|小明最喜欢的语言是: Python Java 小红最喜欢的语言是: C 小刚最喜欢的语言是: Java Go 小丽最喜欢的语言是: Python Javascript
为了进一步完善这个程序,你可以在字典for循环的开始包含一个if语句,通过检查len(languages)的值来查看每个人是否有多个最喜欢的语言。如果一个人有多个最喜欢的语言,输出保持不变。如果这个人只有一种最喜欢的语言,你可以更改措辞来反映这一点。例如,你可以说小红最喜欢的语言是C。
不应该将列表和字典嵌套得太深。如果你嵌套项目比前面例子中看到的更深,或者你正在处理别人的具有重要嵌套级别的代码,很可能存在更简单的方法来解决问题。
你可以在另一个字典中嵌套字典,但你的代码可能会很快变得复杂。例如,如果你有一个网站的几个用户,每个用户都有唯一的用户名,你可以使用用户名作为字典中的键。然后,你可以通过使用字典作为与其用户名关联的值来存储每个用户的信息。在下面的例子中,我们存储每个用户的三条信息:他们的名字、姓氏和位置。我们将通过遍历用户名和与每个用户名关联的信息字典来访问这些信息:
|users = { 'zhangsan': { 'first': '三', 'last': '张', 'location': '北京', }, 'lisi': { 'first': '四', 'last': '李', 'location': '上海', }, } for username, user_info
我们首先定义了一个名为users的字典,有两个键:用户名'zhangsan'和'lisi'各一个。与每个键关联的值是一个字典,包括每个用户的名字、姓氏和位置。我们遍历users字典。Python将每个键分配给变量username,与每个用户名关联的字典分配给变量user_info。在主字典循环内部,我们打印用户名。
然后我们开始访问内部字典。变量user_info包含用户信息字典,有三个键:'first'、 'last' 和 'location'。我们使用每个键生成格式整齐的全名和位置,然后打印我们对每个用户了解的摘要:
|用户名:zhangsan 全名:张三 位置:北京 用户名:lisi 全名:李四 位置:上海
注意每个用户字典的结构是相同的。虽然Python不要求这样做,但这种结构使嵌套字典更容易处理。如果每个用户的字典有不同的键,for循环内的代码会更加复杂。
8. 字典基本操作
创建一个学生字典,添加成绩信息,修改年龄,并安全地获取可能不存在的电话号码。
|student = {'name': '小明', 'age': 18} # 添加成绩信息 student['score'] = 85 # 修改年龄 student['age'] = 19 # 安全地获取电话号码,如果不存在返回"无" phone = student.get('phone', '无') print(f"学生信息:{student}"
9. 字典遍历
编写一个程序,遍历字典的所有键、所有值,以及所有键值对。
|scores = {'语文': 90, '数学': 85, '英语': 92} # 遍历所有键 print("所有科目:") for subject in scores.keys(): print(subject) # 遍历所有值 print("\n所有分数:") for score in scores.values(): print(score)
10. 学生信息管理
编写一个程序,创建学生字典,添加多个学生信息,修改和删除学生信息,并遍历打印所有信息。
|# 创建一个空字典存储学生信息 students = {} # 添加3个学生的姓名和年龄 students['小明'] = {'age': 18, 'score': 85} students['小红'] = {'age': 19, 'score': 92} students['小刚'] = {'age': 18, 'score'
输出结果:
|学生信息:{'name': '小明', 'age': 19, 'score': 85} 电话号码:无
说明:
student['score'] = 85添加新的键值对student['age'] = 19修改已存在的键的值get('phone', '无')安全地获取可能不存在的键,如果不存在则返回默认值"无"输出结果:
|所有科目: 语文 数学 英语 所有分数: 90 85 92 科目和分数: 语文: 90 数学: 85 英语: 92
说明:
keys()方法返回字典中所有键的视图values()方法返回字典中所有值的视图items()方法返回字典中所有(键, 值)元组的视图输出结果:
|学生信息列表: 姓名:小明,年龄:19,成绩:85 姓名:小红,年龄:19,成绩:92
说明:
del关键字删除字典中的键值对items()方法遍历字典的所有键值对