最近更新:Python中级教程 第六课:高级特性与性能优化 1/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 2/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 1/2
2026-01-15
最近更新:Python中级教程 第四课:上下文管理器、生成器与迭代器
2026-01-15
最近更新:Python中级教程 第三课:面向对象编程深入与装饰器
2026-01-15
浏览量:59 次 发布时间:2025-12-30 20:33 作者:明扬工控商城 下载docx
最近更新:Python中级教程 第六课:高级特性与性能优化 1/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 2/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 1/2
2026-01-15
最近更新:Python中级教程 第四课:上下文管理器、生成器与迭代器
2026-01-15
最近更新:Python中级教程 第三课:面向对象编程深入与装饰器
2026-01-15
欢迎来到Python中级教程第一课。经过初级教程学习,你已经掌握Python基础知识,现在我们要进入更实用阶段。今天要学习字典和集合,是Python中最强大、最常用两种数据结构,它们就像数据处理中瑞士军刀,能帮你解决很多实际问题。
先来看一个生活中例子。假设你要管理一个班级学生信息:
用列表存储会是这样:
代码部分:
学生列表 = [
["张三", 18, "男", 85],
["李四", 19, "女", 92],
["王五", 18, "男", 78]
]
这样存储有几个问题:
要记住每个位置元素代表什么(索引0是姓名,索引1是年龄...)
查找某个学生信息需要遍历整个列表
修改时容易出错
用字典存储就清晰多了:
代码部分:
学生字典 = {
"张三": {"年龄": 18, "性别": "男", "成绩": 85},
"李四": {"年龄": 19, "性别": "女", "成绩": 92},
"王五": {"年龄": 18, "性别": "男", "成绩": 78}
}
字典让数据有了名字,存取都更方便!
现实中数据往往是多层,比如学生信息包含基本信息、联系方式、成绩等。嵌套字典可以很好表示这种结构。
代码部分:
复杂学生信息系统
学生信息 = {
"张三": {
"基本信息": {
"学号": "2023001",
"年龄": 18,
"专业": "计算机科学"
},
"联系方式": {
"手机": "13800138000",
"邮箱": "zhangsan@email.com",
"微信": "zhangsan123"
},
"成绩": {
"数学": 85,
"语文": 92,
"英语": 88,
"编程": 95
}
},
"李四": {
"基本信息": {
"学号": "2023002",
"年龄": 19,
"专业": "软件工程"
},
"联系方式": {
"手机": "13900139000",
"邮箱": "lisi@email.com"
},
"成绩": {
"数学": 78,
"语文": 85,
"英语": 90,
"编程": 88
}
}
}
访问嵌套数据
print("张三数学成绩:", 学生信息["张三"]["成绩"]["数学"])
print("李四手机号:", 学生信息["李四"]["联系方式"]["手机"])
修改嵌套数据
学生信息["张三"]["成绩"]["数学"] = 90
print("修改后张三数学成绩:", 学生信息["张三"]["成绩"]["数学"])
添加新学生
学生信息["王五"] = {
"基本信息": {
"学号": "2023003",
"年龄": 20,
"专业": "数据科学"
},
"联系方式": {
"手机": "13700137000",
"邮箱": "wangwu@email.com"
},
"成绩": {
"数学": 95,
"语文": 88,
"英语": 92,
"编程": 96
}
}
删除学生
if "王五" in 学生信息:
del 学生信息["王五"]
print("已删除王五信息")
直接使用多层索引可能会出错,如果中间某一层不存在,程序会崩溃。我们可以使用更安全方法。
代码部分:
不安全访问方式
print(学生信息["赵六"]["成绩"]["数学"]) 会报错,因为赵六不存在
方法1:使用get方法,设置默认值
def 安全获取(字典, 键, 默认值=None):
return 字典.get(键, 默认值)
方法2:使用try-except
try:
成绩 = 学生信息["赵六"]["成绩"]["数学"]
print("赵六数学成绩:", 成绩)
except KeyError:
print("找不到该学生信息")
方法3:使用链式get(Python 3.8+推荐)
如果中间有None,会返回None而不是报错
成绩 = 学生信息.get("赵六", {}).get("成绩", {}).get("数学")
print("赵六数学成绩(安全获取):", 成绩) 输出:None
代码部分:
遍历键
print("所有学生姓名:")
for 姓名 in 学生信息.keys():
print(" -", 姓名)
遍历值
print("\n所有学生详细信息:")
for 信息 in 学生信息.values():
print(" -", 信息)
遍历键值对(最常用)
print("\n学生完整信息:")
for 姓名, 信息 in 学生信息.items():
print(f"姓名:{姓名}")
print(f" 学号:{信息['基本信息']['学号']}")
print(f" 年龄:{信息['基本信息']['年龄']}")
同时获取索引和键值对
print("\n带序号学生列表:")
for 序号, (姓名, 信息) in enumerate(学生信息.items(), 1):
print(f"{序号}. {姓名} - {信息['基本信息']['专业']}")
字典推导式可以让字典创建和转换更简洁高效。
代码部分:
示例1:创建数字平方字典
传统方式
平方字典1 = {}
for i in range(1, 6):
平方字典1[i] = i * i
print("传统方式:", 平方字典1)
字典推导式
平方字典2 = {i: i*i for i in range(1, 6)}
print("推导式:", 平方字典2)
示例2:带条件字典推导式
偶数平方 = {i: i*i for i in range(1, 11) if i % 2 == 0}
print("偶数平方:", 偶数平方)
示例3:转换现有字典
将所有成绩提高10%
原始成绩 = {"数学": 85, "语文": 92, "英语": 88}
调整后成绩 = {科目: 分数*1.1 for 科目, 分数 in 原始成绩.items()}
print("调整后成绩:", 调整后成绩)
示例4:两个列表合并为字典
键列表 = ["姓名", "年龄", "城市"]
值列表 = ["张三", 18, "北京"]
信息字典 = {键列表[i]: 值列表[i] for i in range(len(键列表))}
print("合并后字典:", 信息字典)
示例5:字典键值互换(注意值不能重复)
原始字典 = {"a": 1, "b": 2, "c": 3}
反向字典 = {值: 键 for 键, 值 in 原始字典.items()}
print("反向字典:", 反向字典)
集合是一个无序、不重复元素集,非常适合做去重和集合运算。
代码部分:
创建集合
水果集合 = {"苹果", "香蕉", "橙子", "苹果", "香蕉"} 自动去重
print("水果集合:", 水果集合) 输出:{'苹果', '香蕉', '橙子'}
从列表创建集合(快速去重)
数字列表 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
数字集合 = set(数字列表)
print("去重后集合:", 数字集合) 输出:{1, 2, 3, 4}
集合长度
print("水果集合长度:", len(水果集合))
添加元素
水果集合.add("葡萄")
水果集合.add("西瓜")
print("添加后:", 水果集合)
删除元素
水果集合.remove("香蕉") 如果元素不存在会报错
水果集合.discard("桃子") 如果元素不存在不会报错
print("删除后:", 水果集合)
随机删除并返回一个元素
随机水果 = 水果集合.pop()
print("随机取出:", 随机水果)
print("取出后:", 水果集合)
清空集合
水果集合.clear()
print("清空后:", 水果集合)
集合运算非常强大,可以快速进行数据比较和处理。
代码部分:
创建两个集合
集合A = {1, 2, 3, 4, 5}
集合B = {4, 5, 6, 7, 8}
print("集合A:", 集合A)
print("集合B:", 集合B)
并集:所有元素
并集 = 集合A | 集合B 或使用 集合A.union(集合B)
print("并集(A | B):", 并集)
交集:共同元素
交集 = 集合A & 集合B 或使用 集合A.intersection(集合B)
print("交集(A & B):", 交集)
差集:在A中但不在B中
差集AB = 集合A - 集合B 或使用 集合A.difference(集合B)
差集BA = 集合B - 集合A
print("差集(A - B):", 差集AB)
print("差集(B - A):", 差集BA)
对称差集:只在一个集合中,不同时在两者中
对称差集 = 集合A ^ 集合B 或使用 集合A.symmetric_difference(集合B)
print("对称差集(A ^ B):", 对称差集)
子集和超集判断
集合C = {1, 2, 3}
print("C是A子集吗?", 集合C.issubset(集合A)) 或 集合C <= 集合A
print("A是C超集吗?", 集合A.issuperset(集合C)) 或 集合A >= 集合C
不相交判断(没有共同元素)
print("A和B不相交吗?", 集合A.isdisjoint(集合B))
和列表推导式、字典推导式类似,集合也有推导式。
代码部分:
创建1-10平方集合
平方集合 = {i*i for i in range(1, 11)}
print("1-10平方集合:", 平方集合)
只保留偶数平方
偶数平方集合 = {i*i for i in range(1, 11) if i % 2 == 0}
print("偶数平方集合:", 偶数平方集合)
处理字符串:提取不重复字符
句子 = "hello world hello python"
字符集合 = {字符 for 字符 in 句子 if 字符 != ' '}
print("不重复字符:", 字符集合)
print("字符数量:", len(字符集合))
让我们用字典和集合来升级之前做过通讯录系统。
支持多种联系方式(电话、邮箱、微信等)
按标签分组联系人(家人、朋友、同事)
快速搜索功能(支持模糊搜索)
数据持久化存储(JSON格式)
联系人去重检查
代码部分:
import json
import os
class 高级通讯录:
def init(self, 文件名="通讯录.json"):
self.文件名 = 文件名
self.通讯录 = {} 主字典,存储所有联系人
self.标签索引 = {} 标签到联系人映射
self.加载数据()
def 加载数据(self):
从JSON文件加载通讯录数据
if os.path.exists(self.文件名):
try:
with open(self.文件名, 'r', encoding='utf-8') as f:
数据 = json.load(f)
self.通讯录 = 数据.get("通讯录", {})
self.标签索引 = 数据.get("标签索引", {})
print(f"已从 {self.文件名} 加载 {len(self.通讯录)} 个联系人")
except Exception as e:
print(f"加载数据失败:{e}")
self.通讯录 = {}
self.标签索引 = {}
else:
print("未找到通讯录文件,创建新通讯录")
self.通讯录 = {}
self.标签索引 = {}
def 保存数据(self):
保存通讯录数据到JSON文件
try:
数据 = {
"通讯录": self.通讯录,
"标签索引": self.标签索引
}
with open(self.文件名, 'w', encoding='utf-8') as f:
json.dump(数据, f, ensure_ascii=False, indent=2)
print(f"通讯录已保存到 {self.文件名}")
return True
except Exception as e:
print(f"保存数据失败:{e}")
return False
def 添加联系人(self, 姓名, 手机=None, 邮箱=None, 微信=None, 标签=None):
添加或更新联系人
if not 姓名.strip():
print("错误:姓名不能为空")
return False
检查是否已存在
if 姓名 in self.通讯录:
print(f"联系人 {姓名} 已存在,将更新信息")
构建联系人信息
联系人信息 = {}
if 手机:
联系人信息["手机"] = 手机
if 邮箱:
联系人信息["邮箱"] = 邮箱
if 微信:
联系人信息["微信"] = 微信
处理标签
if 标签:
if isinstance(标签, str):
如果是逗号分隔字符串,转换为列表
标签列表 = [t.strip() for t in 标签.split(',')]
elif isinstance(标签, list):
标签列表 = 标签
else:
标签列表 = []
联系人信息["标签"] = 标签列表
更新标签索引
for 单个标签 in 标签列表:
if 单个标签 not in self.标签索引:
self.标签索引[单个标签] = set()
self.标签索引[单个标签].add(姓名)
保存到通讯录
self.通讯录[姓名] = 联系人信息
print(f"联系人 {姓名} 已保存")
自动保存
self.保存数据()
return True
def 删除联系人(self, 姓名):
删除联系人
if 姓名 in self.通讯录:
从标签索引中移除
联系人信息 = self.通讯录[姓名]
if "标签" in 联系人信息:
for 标签 in 联系人信息["标签"]:
if 标签 in self.标签索引 and 姓名 in self.标签索引[标签]:
self.标签索引[标签].remove(姓名)
如果标签空了,删除该标签
if not self.标签索引[标签]:
del self.标签索引[标签]
从通讯录中删除
del self.通讯录[姓名]
print(f"联系人 {姓名} 已删除")
self.保存数据()
return True
else:
print(f"联系人 {姓名} 不存在")
return False
def 搜索联系人(self, 关键词):
多条件搜索联系人
结果 = set() 使用集合避免重复
遍历所有联系人
for 姓名, 信息 in self.通讯录.items():
1. 在姓名中搜索
if 关键词.lower() in 姓名.lower():
结果.add(姓名)
continue
2. 在各种联系方式中搜索
联系方式字段 = ["手机", "邮箱", "微信", "地址", "公司"]
for 字段 in 联系方式字段:
if 字段 in 信息 and 信息[字段] and 关键词 in str(信息[字段]):
结果.add(姓名)
break
3. 在标签中搜索
if "标签" in 信息:
for 标签 in 信息["标签"]:
if 关键词 in 标签:
结果.add(姓名)
break
return list(结果)
def 按标签查找(self, 标签):
根据标签查找联系人
if 标签 in self.标签索引:
return list(self.标签索引[标签])
else:
return []
def 获取所有标签(self):
获取所有标签
return list(self.标签索引.keys())
def 显示联系人(self, 姓名):
显示单个联系人详细信息
if 姓名 in self.通讯录:
信息 = self.通讯录[姓名]
print(f"\n姓名:{姓名}")
print("-" * 30)
for 字段, 值 in 信息.items():
if 字段 == "标签":
print(f"{字段}:{', '.join(值)}")
else:
print(f"{字段}:{值}")
print("-" * 30)
return True
else:
print(f"联系人 {姓名} 不存在")
return False
def 显示所有联系人(self):
显示所有联系人简要信息
if not self.通讯录:
print("通讯录为空")
return
print(f"\n通讯录中共有 {len(self.通讯录)} 个联系人")
print("=" * 50)
for 序号, (姓名, 信息) in enumerate(self.通讯录.items(), 1):
标签 = 信息.get("标签", [])
手机 = 信息.get("手机", "未填写")
print(f"{序号:2d}. {姓名:10} - 手机:{手机:15} - 标签:{', '.join(标签) if 标签 else '无'}")
print("=" * 50)
def 统计信息(self):
显示通讯录统计信息
总数 = len(self.通讯录)
有手机 = sum(1 for 信息 in self.通讯录.values() if "手机" in 信息)
有邮箱 = sum(1 for 信息 in self.通讯录.values() if "邮箱" in 信息)
有标签 = sum(1 for 信息 in self.通讯录.values() if "标签" in 信息 and 信息["标签"])
标签总数 = len(self.标签索引)
print("\n通讯录统计信息:")
print("=" * 30)
print(f"联系人总数:{总数}")
print(f"有手机号人数:{有手机}")
print(f"有邮箱人数:{有邮箱}")
print(f"有标签人数:{有标签}")
print(f"标签种类数:{标签总数}")
print("=" * 30)
使用示例
def 演示通讯录():
演示高级通讯录使用
通讯录 = 高级通讯录()
添加一些测试数据
测试数据 = [
{"姓名": "张三", "手机": "13800138000", "邮箱": "zhangsan@company.com", "微信": "zhangsan123", "标签": ["同事", "项目组"]},
{"姓名": "李四", "手机": "13900139000", "邮箱": "lisi@gmail.com", "微信": "lisi_wechat", "标签": ["朋友", "大学同学"]},
{"姓名": "王五", "手机": "13700137000", "邮箱": "wangwu@family.com", "标签": ["家人", "紧急联系人"]},
{"姓名": "赵六", "手机": "13600136000", "标签": ["同事", "客户"]},
{"姓名": "孙七", "邮箱": "sunqi@friend.com", "微信": "sunqi777", "标签": ["朋友"]},
]
for 数据 in 测试数据:
通讯录.添加联系人(**数据)
显示所有联系人
通讯录.显示所有联系人()
搜索演示
print("\n搜索演示:")
print("搜索'张':", 通讯录.搜索联系人("张"))
print("搜索'138':", 通讯录.搜索联系人("138"))
print("搜索'同事':", 通讯录.搜索联系人("同事"))
按标签查找
print("\n按标签查找:")
print("所有同事:", 通讯录.按标签查找("同事"))
print("所有朋友:", 通讯录.按标签查找("朋友"))
显示单个联系人详情
print("\n显示联系人详情:")
通讯录.显示联系人("张三")
统计信息
通讯录.统计信息()
return 通讯录
if name == "main":
演示通讯录()
词频统计是文本处理基础,字典在这里发挥了巨大作用。
代码部分:
import string
from collections import Counter
class 词频统计器:
def init(self):
self.停用词 = self.加载停用词()
def 加载停用词(self):
加载中文停用词表
这里是一个简单停用词列表,实际应用中可以从文件加载更完整列表
停用词 = {
'的', '了', '在', '是', '我', '有', '和', '就',
'不', '人', '都', '一', '一个', '上', '也', '很',
'到', '说', '要', '去', '你', '会', '着', '没有',
'看', '好', '自己', '这', '那', '他', '她', '它'
}
return 停用词
def 清洗文本(self, 文本):
清洗文本:去除标点、转换为小写、去除停用词
转换为小写
文本 = 文本.lower()
去除标点符号
文本 = 文本.translate(str.maketrans('', '', string.punctuation))
去除数字(可选)
文本 = ''.join([字符 for 字符 in 文本 if not 字符.isdigit()])
分割为单词列表
单词列表 = 文本.split()
去除停用词
单词列表 = [单词 for 单词 in 单词列表 if 单词 not in self.停用词 and len(单词) > 1]
return 单词列表
def 统计词频(self, 文本):
统计文本词频
清洗文本
单词列表 = self.清洗文本(文本)
方法1:使用普通字典
词频字典 = {}
for 单词 in 单词列表:
词频字典[单词] = 词频字典.get(单词, 0) + 1
方法2:使用Counter(更简洁)
词频字典 = Counter(单词列表)
return 词频字典
def 获取前N个词(self, 词频字典, N=10):
获取出现频率最高N个词
按值(频率)排序
排序后列表 = sorted(词频字典.items(), key=lambda x: x[1], reverse=True)
返回前N个
return 排序后列表[:N]
def 生成词云数据(self, 词频字典, 最大词数=20):
生成用于词云数据格式
前N个词 = self.获取前N个词(词频字典, 最大词数)
转换为词云库需要格式
词云数据 = {单词: 频率 for 单词, 频率 in 前N个词}
return 词云数据
def 分析文件(self, 文件名, 显示结果=True):
分析文本文件词频
try:
读取文件
with open(文件名, 'r', encoding='utf-8') as f:
文本内容 = f.read()
统计词频
词频字典 = self.统计词频(文本内容)
总词数 = sum(词频字典.values())
不同词数 = len(词频字典)
前10词 = self.获取前N个词(词频字典, 10)
if 显示结果:
print(f"\n文件分析结果:{文件名}")
print("=" * 50)
print(f"总词数:{总词数}")
print(f"不同词数:{不同词数}")
print(f"词汇密度:{不同词数/总词数:.2%}")
print("\n出现频率最高10个词:")
print("-" * 30)
for 单词, 频率 in 前10词:
百分比 = 频率 / 总词数 * 100
print(f"{单词:15} : {频率:4d}次 ({百分比:.1f}%)")
print("=" * 50)
返回统计结果
return {
"总词数": 总词数,
"不同词数": 不同词数,
"词频字典": 词频字典,
"前10词": 前10词
}
except FileNotFoundError:
print(f"错误:文件 {文件名} 不存在")
return None
except Exception as e:
print(f"分析文件时出错:{e}")
return None
def 比较两个文件(self, 文件1, 文件2):
比较两个文件用词差异
结果1 = self.分析文件(文件1, 显示结果=False)
结果2 = self.分析文件(文件2, 显示结果=False)
if 结果1 is None or 结果2 is None:
return
获取两个文件词集
词集1 = set(结果1["词频字典"].keys())
词集2 = set(结果2["词频字典"].keys())
计算各种集合运算
共同词 = 词集1 & 词集2
仅文件1词 = 词集1 - 词集2
仅文件2词 = 词集2 - 词集1
所有词 = 词集1 | 词集2
print(f"\n文件比较:{文件1} vs {文件2}")
print("=" * 60)
print(f"文件1总词数:{结果1['总词数']}")
print(f"文件2总词数:{结果2['总词数']}")
print(f"共同词数:{len(共同词)}")
print(f"仅出现在文件1词数:{len(仅文件1词)}")
print(f"仅出现在文件2词数:{len(仅文件2词)}")
print(f"所有不同词数:{len(所有词)}")
显示独有词(前5个)
if 仅文件1词:
print(f"\n仅出现在 {文件1} 词(前5个):")
仅文件1词列表 = list(仅文件1词)[:5]
for 词 in 仅文件1词列表:
print(f" - {词}")
if 仅文件2词:
print(f"\n仅出现在 {文件2} 词(前5个):")
仅文件2词列表 = list(仅文件2词)[:5]
for 词 in 仅文件2词列表:
print(f" - {词}")
print("=" * 60)
使用示例
def 演示词频统计():
演示词频统计器使用
创建统计器实例
统计器 = 词频统计器()
示例文本
测试文本 = """
Python是一种广泛使用高级编程语言,由吉多·范罗苏姆创造,
第一版发布于1991年。Python设计哲学强调代码可读性和简洁语法。
Python让开发者能够用更少代码表达想法,相比其他语言,如C++或Java。
Python支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。
Python拥有动态类型系统和垃圾回收功能,能够自动管理内存使用。
Python简洁语法和强大功能使其成为数据科学、机器学习、
网络开发和自动化脚本等领域首选语言。许多大型公司,
如Google、Facebook、NASA等,都在使用Python进行开发。
"""
print("词频统计示例:")
print("=" * 50)
统计词频
词频字典 = 统计器.统计词频(测试文本)
获取前10个词
前10词 = 统计器.获取前N个词(词频字典, 10)
显示结果
print("出现频率最高10个词:")
for 单词, 频率 in 前10词:
print(f"{单词:15} : {频率}次")
print("=" * 50)
生成词云数据
词云数据 = 统计器.生成词云数据(词频字典, 15)
print("\n词云数据(前15个词):")
for 单词, 频率 in 词云数据.items():
print(f"{单词}: {频率}")
return 统计器
def 演示文件分析():
演示文件分析功能
统计器 = 词频统计器()
需要实际文件路径,这里用示例说明
print("\n文件分析功能演示:")
print("(需要替换为实际文件路径)")
示例代码,实际使用时取消注释并修改文件路径
"""
分析单个文件
统计器.分析文件("文章.txt")
比较两个文件
统计器.比较两个文件("文章1.txt", "文章2.txt")
"""
print("请将上述代码中文件路径替换为实际文件路径")
if name == "main":
演示词频统计()
演示文件分析()
字典深度使用:嵌套字典、字典推导式、安全访问方法
集合强大功能:自动去重、集合运算、集合推导式
两个实战项目:高级通讯录系统、词频统计工具
实际编程技巧:错误处理、数据持久化、代码组织
配置管理:使用嵌套字典存储复杂配置
数据统计:使用字典进行各种数据统计
快速去重:使用集合去除重复数据
关系分析:使用集合运算分析数据关系
文本处理:词频统计、文本分析
问题1:什么时候用字典?什么时候用集合?
用字典:当需要存储键值对,需要通过键快速查找值时
用集合:当只需要存储不重复值,或需要进行集合运算时
问题2:字典推导式和循环创建字典哪个更好?
字典推导式更简洁,执行效率通常更高
但对于复杂逻辑,使用普通循环可能更清晰
问题3:集合和列表去重有什么区别?
集合自动去重,且查找元素速度比列表快得多
但集合是无序,如果需要保持顺序,可以先转集合去重,再转回列表
任务1:改进通讯录系统
添加生日字段,并实现生日提醒功能
添加分组功能(如"家人"、"朋友"、"同事")
实现导出为CSV格式功能
任务2:扩展词频统计器
添加词性标注功能(需要学习自然语言处理库)
实现情感分析(判断文本情感倾向)
添加生成词云图片功能
任务3:创建个人记账系统
使用字典存储每笔交易详细信息
实现按类别、时间统计支出
生成每月消费报告
下一课我们将学习文件处理专家,内容包括:
JSON文件深度处理(配置文件、数据交换)
Excel文件自动化操作(读写、格式处理)
PDF文件文本提取
实战项目:自动整理桌面文件工具
你已经掌握了Python中最强大两种数据结构,这是成为Python高手必经之路。继续加油,我们下节课再见!
记住:字典和集合是Python编程中"瑞士军刀",熟练使用它们会让你编程效率大大提高!
将本文的Word文档下载到电脑
推荐度: