【学习笔记】《Python编程 从入门到实践》第6章:字典创建、遍历与嵌套用法详解

发布时间:2026/7/25 5:59:12
【学习笔记】《Python编程 从入门到实践》第6章:字典创建、遍历与嵌套用法详解 【学习笔记】《Python编程 从入门到实践》第6章字典创建、遍历与嵌套用法详解一、字典的基础概念字典Dictionary是Python中非常重要的内置数据结构它通过键值对key-value pair的方式存储数据。与列表使用索引不同字典使用键来访问对应的值这让数据查找更加直观和高效。字典的特点- 键必须是不可变类型如字符串、数字、元组- 值可以是任何Python对象包括列表、字典等- 键是唯一的但值可以重复- 从Python 3.7开始字典保持插入顺序## 二、创建字典的多种方式### 2.1 使用花括号直接创建这是最常用的创建方式通过花括号包裹键值对键和值之间用冒号分隔。python# 创建一个空字典empty_dict {}# 创建一个包含学生信息的字典student { name: 小明, age: 18, grade: 高三, scores: {math: 95, english: 88} # 值可以是字典}print(student[name]) # 输出小明print(student[scores][math]) # 输出95### 2.2 使用dict()构造函数dict()函数可以从其他序列或关键字参数创建字典特别适合在需要动态创建字典时使用。python# 使用关键字参数创建person dict(name小红, age20, city北京)print(person) # 输出{name: 小红, age: 20, city: 北京}# 从包含元组的列表创建items [(apple, 5), (banana, 3), (orange, 8)]fruit_prices dict(items)print(fruit_prices) # 输出{apple: 5, banana: 3, orange: 8}# 使用zip函数创建keys [name, age, city]values [小刚, 22, 上海]person2 dict(zip(keys, values))print(person2) # 输出{name: 小刚, age: 22, city: 上海}### 2.3 使用字典推导式字典推导式是创建字典的简洁方式特别适合对现有数据进行转换。python# 创建一个数字平方的字典squares {x: x**2 for x in range(1, 6)}print(squares) # 输出{1: 1, 2: 4, 3: 9, 4: 16, 5: 16}# 根据条件创建字典even_squares {x: x**2 for x in range(1, 11) if x % 2 0}print(even_squares) # 输出{2: 4, 4: 16, 6: 36, 8: 64, 10: 100}## 三、字典的基本操作### 3.1 添加和修改键值对字典是可变对象可以随时添加新的键值对或修改已有键的值。python# 创建一个空字典user {}# 添加键值对user[username] python_loveruser[email] pythonexample.comuser[age] 25print(user) # 输出{username: python_lover, email: pythonexample.com, age: 25}# 修改已有键的值user[age] 26 # 年龄更新print(user[age]) # 输出26### 3.2 删除键值对使用del语句可以删除指定的键值对。python# 继续使用上面的user字典del user[email] # 删除email键print(user) # 输出{username: python_lover, age: 26}# 使用pop方法删除并返回值removed_age user.pop(age)print(f删除的年龄值{removed_age}) # 输出删除的年龄值26print(user) # 输出{username: python_lover}### 3.3 安全地访问字典值使用get()方法可以避免因键不存在而引发KeyError。python# 创建一个包含用户信息的字典user_info { name: 小华, skills: [Python, Java, JavaScript]}# 使用get方法安全访问print(user_info.get(name)) # 输出小华print(user_info.get(age)) # 输出None键不存在时返回Noneprint(user_info.get(age, 未知)) # 输出未知提供默认值# 使用in关键字检查键是否存在if skills in user_info: print(f技能列表{user_info[skills]}) # 输出技能列表[Python, Java, JavaScript]## 四、遍历字典的方法### 4.1 遍历所有键值对使用items()方法可以同时获取键和值这是最常用的遍历方式。python# 完整可运行的示例遍历并输出字典内容print( 遍历字典示例 )# 创建一个存储书籍信息的字典books { Python入门: {author: 张三, price: 59.9, stock: 100}, Java实战: {author: 李四, price: 79.9, stock: 50}, 数据结构: {author: 王五, price: 45.0, stock: 200}}print(1. 遍历所有键值对)for book_name, book_info in books.items(): print(f 书名{book_name}) print(f 作者{book_info[author]}) print(f 价格{book_info[price]}元) print(f 库存{book_info[stock]}本) print() # 空行分隔print(2. 仅遍历键)for book_name in books.keys(): print(f - {book_name})print(\n3. 仅遍历值)for book_info in books.values(): print(f 作者{book_info[author]}, 价格{book_info[price]}元)### 4.2 遍历键和值的高级用法python# 使用sorted()函数对键进行排序遍历print( 排序遍历示例 )grades { Alice: 95, Bob: 87, Charlie: 92, David: 78}print(按字母顺序排序学生成绩)for student in sorted(grades.keys()): print(f {student}: {grades[student]}分)## 五、字典的嵌套用法### 5.1 字典中嵌套列表字典的值可以是列表这在存储多个相关值时非常有用。python# 完整可运行的示例嵌套结构的使用print( 字典嵌套列表示例 )# 存储班级信息每个班级包含多个学生姓名classes { A班: [小明, 小红, 小刚], B班: [小华, 小丽, 小强], C班: [小美, 小杰, 小芳]}# 遍历嵌套结构print(各班学生名单)for class_name, students in classes.items(): print(f {class_name}:, end ) for student in students: print(f{student}, end ) print() # 换行# 添加新学生到特定班级classes[A班].append(小新)print(\n添加小新到A班后)print(fA班学生{classes[A班]})### 5.2 字典中嵌套字典这种结构非常适合存储层次化的数据。python# 存储更复杂的嵌套结构print(\n 字典嵌套字典示例 )# 创建一个包含多个用户详细信息的字典users { user001: { name: 张三, age: 28, address: { city: 北京, district: 海淀区, street: 中关村大街 }, hobbies: [编程, 阅读, 跑步] }, user002: { name: 李四, age: 25, address: { city: 上海, district: 浦东新区, street: 陆家嘴环路 }, hobbies: [摄影, 旅行] }}# 访问嵌套数据for user_id, user_info in users.items(): print(f\n用户ID{user_id}) print(f 姓名{user_info[name]}) print(f 年龄{user_info[age]}) print(f 地址{user_info[address][city]} {user_info[address][district]}) print(f 爱好{, .join(user_info[hobbies])})### 5.3 列表中嵌套字典当需要存储多个相似结构的字典时可以使用列表来组织。python# 存储多个用户的列表print(\n 列表中嵌套字典示例 )# 创建用户列表users_list [ {name: 王五, age: 30, job: 工程师}, {name: 赵六, age: 27, job: 设计师}, {name: 孙七, age: 32, job: 产品经理}]print(用户列表)for user in users_list: print(f 姓名{user[name]}, 年龄{user[age]}, 职业{user[job]})# 添加新用户users_list.append({name: 周八, age: 29, job: 测试工程师})print(f\n添加新用户后共{len(users_list)}位用户)## 六、实战案例学生成绩管理系统下面是一个综合使用字典各种特性的实战案例。python# 学生成绩管理系统print( * 40)print(学生成绩管理系统)print( * 40)# 创建学生成绩字典students_scores { 小明: {math: 95, english: 88, python: 92}, 小红: {math: 82, english: 91, python: 78}, 小刚: {math: 88, english: 85, python: 95}}# 计算每位学生的平均分print(\n学生成绩统计)for student, scores in students_scores.items(): total sum(scores.values()) avg total / len(scores) print(f {student}:) print(f 数学{scores[math]}分) print(f 英语{scores[english]}分) print(f Python{scores[python]}分) print(f 平均分{avg:.1f}分)# 计算各科平均分print(\n各科平均分)subjects [math, english, python]for subject in subjects: total sum(student[subject] for student in students_scores.values()) avg total / len(students_scores) print(f {subject}: {avg:.1f}分)# 查找最高分学生print(\n各科最高分)for subject in subjects: max_score 0 max_student for student, scores in students_scores.items(): if scores[subject] max_score: max_score scores[subject] max_student student print(f {subject}: {max_student} ({max_score}分))## 七、字典的高级技巧### 7.1 使用defaultdict处理默认值pythonfrom collections import defaultdict# 使用defaultdict避免键不存在的错误word_count defaultdict(int)text python is great and python is powerfulfor word in text.split(): word_count[word] 1print(单词计数)for word, count in word_count.items(): print(f {word}: {count}次)### 7.2 字典合并操作python# Python 3.9 支持使用 | 运算符合并字典dict1 {a: 1, b: 2}dict2 {c: 3, d: 4}# 方法1使用update方法merged1 dict1.copy()merged1.update(dict2)print(f使用update合并{merged1})# 方法2使用解包操作Python 3.5merged2 {**dict1, **dict2}print(f使用解包合并{merged2})# 方法3使用|运算符Python 3.9merged3 dict1 | dict2print(f使用|运算符合并{merged3})## 八、总结本章详细介绍了Python字典的创建、遍历和嵌套用法这些知识在实际编程中非常重要。字典作为Python中最灵活的数据结构之一其键值对的设计使得数据组织更加直观和高效。关键要点回顾1.创建方式花括号、dict()构造函数、字典推导式根据场景选择合适的方式2.基本操作添加、修改、删除键值对使用get()安全访问3.遍历方法items()、keys()、values()各有用途sorted()实现排序遍历4.嵌套结构字典可以包含列表、字典或其他数据结构构建复杂的数据模型5.高级技巧defaultdict处理默认值字典合并操作提高代码效率掌握字典的使用能够帮助你更好地组织和处理数据为后续学习更高级的Python编程打下坚实基础。建议多动手实践尝试用字典解决实际问题这样能更快地熟练掌握这一重要数据类型。