您已经了解字典使用与值关联的唯一键来存储信息。当您知道键时,这种结构对于查找信息非常高效。现在,让我们看看如何实际地获取、更改、添加或移除这些键值对。使用键访问值获取与特定键关联的值最直接的方式是使用方括号 [],这类似于通过索引访问列表中的元素,但在这里您使用键代替。# 示例字典:学生成绩 student_grades = {'Alice': 85, 'Bob': 92, 'Charlie': 78} # 访问 Bob 的成绩 bob_grade = student_grades['Bob'] print(f"Bob's grade is: {bob_grade}") # 输出:Bob 的成绩是:92 # 访问 Alice 的成绩 alice_grade = student_grades['Alice'] print(f"Alice's grade is: {alice_grade}") # 输出:Alice 的成绩是:85如果您尝试使用方括号访问字典中不存在的键,Python 将会引发 KeyError。这表明您请求的键未找到。# 尝试访问不存在的键 # david_grade = student_grades['David'] # 这一行会引发 KeyError # print(david_grade)运行上面被注释掉的代码行将导致程序停止,并出现类似 KeyError: 'David' 的错误消息。在第 9 章,您将学习如何优雅地处理此类错误,但目前了解它们可能发生就足够了。更安全的访问数据方式由于使用 [] 访问不存在的键会导致错误,Python 提供了更安全的方法来获取值或检查键是否存在。使用 get() 方法字典的 get() 方法像方括号一样获取键的值,但有一个重要区别:如果未找到键,它会返回 None(一个表示缺少值的特殊 Python 值),而不是引发 KeyError。student_grades = {'Alice': 85, 'Bob': 92, 'Charlie': 78} # 获取 Bob 的成绩(键存在) bob_grade = student_grades.get('Bob') print(f"Bob's grade (using get): {bob_grade}") # 输出:Bob 的成绩(使用 get):92 # 尝试获取 David 的成绩(键不存在) david_grade = student_grades.get('David') print(f"David's grade (using get): {david_grade}") # 输出:David 的成绩(使用 get):None您还可以为 get() 提供一个默认值作为第二个参数。如果未找到键,get() 将返回此默认值而不是 None。student_grades = {'Alice': 85, 'Bob': 92, 'Charlie': 78} # 获取 David 的成绩,如果未找到则返回 0 david_grade = student_grades.get('David', 0) print(f"David's grade (with default): {david_grade}") # 输出:David 的成绩(带默认值):0 # 获取 Alice 的成绩(键存在,默认值被忽略) alice_grade = student_grades.get('Alice', 0) print(f"Alice's grade (with default): {alice_grade}") # 输出:Alice 的成绩(带默认值):85当您不确定键是否存在并且希望程序不中断地继续运行时,通常首选使用 get()。使用 in 检查键是否存在避免 KeyError 的另一种方法是在尝试访问键 之前 检查它是否存在于字典中。您可以使用 in 运算符来完成此操作,如果键存在,它返回 True,否则返回 False。student_grades = {'Alice': 85, 'Bob': 92, 'Charlie': 78} # 检查 'Alice' 是否是键 if 'Alice' in student_grades: print("Alice 在字典中。") # 现在可以安全地访问 print(f"Alice's grade: {student_grades['Alice']}") else: print("Alice 不在字典中。") # 检查 'David' 是否是键 if 'David' in student_grades: print("David 在字典中。") else: print("David 不在字典中。") # 这将被打印添加或修改键值对添加新的键值对或更改与现有键关联的值使用相同的简单赋值语法和方括号。如果您在方括号中指定的键在字典中 不存在,则会添加一个新的键值对。 如果键 已经存在,则与该键关联的值将更新为新值。student_grades = {'Alice': 85, 'Bob': 92, 'Charlie': 78} print(f"Original grades: {student_grades}") # 添加新学生 David student_grades['David'] = 88 print(f"After adding David: {student_grades}") # 更新 Bob 的成绩 student_grades['Bob'] = 95 print(f"After updating Bob's grade: {student_grades}")Output:Original grades: {'Alice': 85, 'Bob': 92, 'Charlie': 78} After adding David: {'Alice': 85, 'Bob': 92, 'Charlie': 78, 'David': 88} After updating Bob's grade: {'Alice': 85, 'Bob': 95, 'Charlie': 78, 'David': 88}这使得字典在存储可能随时间变化或增加的数据时很灵活。移除键值对有时您需要从字典中移除项目。Python 提供了几种方法来执行此操作。使用 del 语句del 语句根据键移除一个键值对。student_grades = {'Alice': 85, 'Bob': 95, 'Charlie': 78, 'David': 88} print(f"Grades before deletion: {student_grades}") # 从字典中移除 Charlie del student_grades['Charlie'] print(f"Grades after deleting Charlie: {student_grades}")Output:Grades before deletion: {'Alice': 85, 'Bob': 95, 'Charlie': 78, 'David': 88} Grades after deleting Charlie: {'Alice': 85, 'Bob': 95, 'David': 88}与使用 [] 访问类似,如果您尝试 del 一个不存在的键,Python 将会引发 KeyError。使用 pop() 方法pop() 方法也根据键移除一个键值对,但它会做一些额外的事情:它返回与被移除键关联的值。如果您想立即使用被移除的值,这会很有用。student_grades = {'Alice': 85, 'Bob': 95, 'David': 88} print(f"Grades before pop: {student_grades}") # 移除 David 并存储他的成绩 davids_removed_grade = student_grades.pop('David') print(f"Removed David's grade: {davids_removed_grade}") # 输出:移除的 David 的成绩:88 print(f"Grades after popping David: {student_grades}") # 输出:移除 David 后成绩:{'Alice': 85, 'Bob': 95}如果您尝试 pop() 一个不存在的键,它将引发 KeyError,就像 del 一样。但是,pop() 允许您提供一个默认值作为第二个参数。如果未找到键,pop() 将返回默认值而不是引发错误。student_grades = {'Alice': 85, 'Bob': 95} # 尝试 pop 'Charlie',提供默认值 result = student_grades.pop('Charlie', 'Not Found') print(f"Result of popping Charlie: {result}") # 输出:pop Charlie 的结果:Not Found print(f"Grades remain unchanged: {student_grades}") # 输出:成绩保持不变:{'Alice': 85, 'Bob': 95}使用 popitem()还有一个方法叫做 popitem(),它会移除并返回字典中一个 任意 的(键,值)对。在 Python 3.7 之前,它会移除一个真正随机的项。在 Python 3.7+ 中,它遵循后进先出(LIFO)顺序,移除最近添加的项。对于初学者来说,这比 del 或 pop(key) 使用得少。student_grades = {'Alice': 85, 'Bob': 95} student_grades['Eve'] = 90 # 最后添加 Eve # 移除并返回最后添加的项(在 Python 3.7+ 中) last_item = student_grades.popitem() print(f"Removed item: {last_item}") # 输出:移除的项:('Eve', 90) print(f"Dictionary after popitem: {student_grades}") # 输出:popitem 后字典:{'Alice': 85, 'Bob': 95}您现在已经掌握了与字典中存储数据交互的必要工具:安全或直接地访问值、添加新对、更新现有对以及在必要时移除对。这些操作是有效使用字典编写程序的基础。