Python中级教程第一课:数据处理的瑞士军刀——字典与集合

浏览量:59 次 发布时间:2025-12-30 20:33 作者:明扬工控商城 下载docx

最近更新:Python中级教程 第三课:面向对象编程深入与装饰器

Python中级教程第一课 数据处理瑞士军刀 字典与集合

欢迎来到Python中级教程第一课。经过初级教程学习,你已经掌握Python基础知识,现在我们要进入更实用阶段。今天要学习字典和集合,是Python中最强大、最常用两种数据结构,它们就像数据处理中瑞士军刀,能帮你解决很多实际问题。

第一部分 为什么需要字典和集合?

先来看一个生活中例子。假设你要管理一个班级学生信息:

用列表存储会是这样:

代码部分:
学生列表 = [
["张三", 18, "男", 85],
["李四", 19, "女", 92],
["王五", 18, "男", 78]
]

这样存储有几个问题:

  1. 要记住每个位置元素代表什么(索引0是姓名,索引1是年龄...)

  2. 查找某个学生信息需要遍历整个列表

  3. 修改时容易出错

用字典存储就清晰多了:

代码部分:
学生字典 = {
"张三": {"年龄": 18, "性别": "男", "成绩": 85},
"李四": {"年龄": 19, "性别": "女", "成绩": 92},
"王五": {"年龄": 18, "性别": "男", "成绩": 78}
}

字典让数据有了名字,存取都更方便!

第二部分 字典深度探索

2.1 嵌套字典 数据多层结构

现实中数据往往是多层,比如学生信息包含基本信息、联系方式、成绩等。嵌套字典可以很好表示这种结构。

代码部分:
复杂学生信息系统
学生信息 = {
"张三": {
"基本信息": {
"学号": "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("已删除王五信息")

2.2 安全地访问嵌套字典

直接使用多层索引可能会出错,如果中间某一层不存在,程序会崩溃。我们可以使用更安全方法。

代码部分:
不安全访问方式
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

2.3 字典遍历技巧

代码部分:

  1. 遍历键
    print("所有学生姓名:")
    for 姓名 in 学生信息.keys():
    print(" -", 姓名)

  2. 遍历值
    print("\n所有学生详细信息:")
    for 信息 in 学生信息.values():
    print(" -", 信息)

  3. 遍历键值对(最常用)
    print("\n学生完整信息:")
    for 姓名, 信息 in 学生信息.items():
    print(f"姓名:{姓名}")
    print(f" 学号:{信息['基本信息']['学号']}")
    print(f" 年龄:{信息['基本信息']['年龄']}")

  4. 同时获取索引和键值对
    print("\n带序号学生列表:")
    for 序号, (姓名, 信息) in enumerate(学生信息.items(), 1):
    print(f"{序号}. {姓名} - {信息['基本信息']['专业']}")

2.4 字典推导式 高效字典创建

字典推导式可以让字典创建和转换更简洁高效。

代码部分:
示例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("反向字典:", 反向字典)

第三部分 集合操作 去重与集合运算

集合是一个无序、不重复元素集,非常适合做去重和集合运算。

3.1 集合基本操作

代码部分:
创建集合
水果集合 = {"苹果", "香蕉", "橙子", "苹果", "香蕉"} 自动去重
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("清空后:", 水果集合)

3.2 集合运算

集合运算非常强大,可以快速进行数据比较和处理。

代码部分:
创建两个集合
集合A = {1, 2, 3, 4, 5}
集合B = {4, 5, 6, 7, 8}

print("集合A:", 集合A)
print("集合B:", 集合B)

  1. 并集:所有元素
    并集 = 集合A | 集合B 或使用 集合A.union(集合B)
    print("并集(A | B):", 并集)

  2. 交集:共同元素
    交集 = 集合A & 集合B 或使用 集合A.intersection(集合B)
    print("交集(A & B):", 交集)

  3. 差集:在A中但不在B中
    差集AB = 集合A - 集合B 或使用 集合A.difference(集合B)
    差集BA = 集合B - 集合A
    print("差集(A - B):", 差集AB)
    print("差集(B - A):", 差集BA)

  4. 对称差集:只在一个集合中,不同时在两者中
    对称差集 = 集合A ^ 集合B 或使用 集合A.symmetric_difference(集合B)
    print("对称差集(A ^ B):", 对称差集)

  5. 子集和超集判断
    集合C = {1, 2, 3}
    print("C是A子集吗?", 集合C.issubset(集合A)) 或 集合C <= 集合A
    print("A是C超集吗?", 集合A.issuperset(集合C)) 或 集合A >= 集合C

  6. 不相交判断(没有共同元素)
    print("A和B不相交吗?", 集合A.isdisjoint(集合B))

3.3 集合推导式

和列表推导式、字典推导式类似,集合也有推导式。

代码部分:
创建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(字符集合))

第四部分 实战项目1 通讯录管理系统升级版

让我们用字典和集合来升级之前做过通讯录系统。

项目需求:

  1. 支持多种联系方式(电话、邮箱、微信等)

  2. 按标签分组联系人(家人、朋友、同事)

  3. 快速搜索功能(支持模糊搜索)

  4. 数据持久化存储(JSON格式)

  5. 联系人去重检查

代码实现:

代码部分:
import json
import os

class 高级通讯录:
def init(self, 文件名="通讯录.json"):
self.文件名 = 文件名
self.通讯录 = {} 主字典,存储所有联系人
self.标签索引 = {} 标签到联系人映射
self.加载数据()

text
复制
下载
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 演示通讯录():
演示高级通讯录使用
通讯录 = 高级通讯录()

text
复制
下载
添加一些测试数据
测试数据 = [
    {"姓名": "张三", "手机": "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":
演示通讯录()

第五部分 实战项目2 词频统计工具

词频统计是文本处理基础,字典在这里发挥了巨大作用。

代码部分:
import string
from collections import Counter

class 词频统计器:
def init(self):
self.停用词 = self.加载停用词()

text
复制
下载
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 演示词频统计():
演示词频统计器使用
创建统计器实例
统计器 = 词频统计器()

text
复制
下载
示例文本
测试文本 = """
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 演示文件分析():
演示文件分析功能
统计器 = 词频统计器()

text
复制
下载
需要实际文件路径,这里用示例说明
print("\n文件分析功能演示:")
print("(需要替换为实际文件路径)")

示例代码,实际使用时取消注释并修改文件路径
"""
分析单个文件
统计器.分析文件("文章.txt")

比较两个文件
统计器.比较两个文件("文章1.txt", "文章2.txt")
"""

print("请将上述代码中文件路径替换为实际文件路径")

if name == "main":
演示词频统计()
演示文件分析()

第六部分 本课总结

今天学到了什么:

  1. 字典深度使用:嵌套字典、字典推导式、安全访问方法

  2. 集合强大功能:自动去重、集合运算、集合推导式

  3. 两个实战项目:高级通讯录系统、词频统计工具

  4. 实际编程技巧:错误处理、数据持久化、代码组织

实际应用场景:

  1. 配置管理:使用嵌套字典存储复杂配置

  2. 数据统计:使用字典进行各种数据统计

  3. 快速去重:使用集合去除重复数据

  4. 关系分析:使用集合运算分析数据关系

  5. 文本处理:词频统计、文本分析

常见问题解答:

问题1:什么时候用字典?什么时候用集合?

  • 用字典:当需要存储键值对,需要通过键快速查找值时

  • 用集合:当只需要存储不重复值,或需要进行集合运算时

问题2:字典推导式和循环创建字典哪个更好?

  • 字典推导式更简洁,执行效率通常更高

  • 但对于复杂逻辑,使用普通循环可能更清晰

问题3:集合和列表去重有什么区别?

  • 集合自动去重,且查找元素速度比列表快得多

  • 但集合是无序,如果需要保持顺序,可以先转集合去重,再转回列表

练习任务:

任务1:改进通讯录系统

  • 添加生日字段,并实现生日提醒功能

  • 添加分组功能(如"家人"、"朋友"、"同事")

  • 实现导出为CSV格式功能

任务2:扩展词频统计器

  • 添加词性标注功能(需要学习自然语言处理库)

  • 实现情感分析(判断文本情感倾向)

  • 添加生成词云图片功能

任务3:创建个人记账系统

  • 使用字典存储每笔交易详细信息

  • 实现按类别、时间统计支出

  • 生成每月消费报告

下节课预告:

下一课我们将学习文件处理专家,内容包括:

  1. JSON文件深度处理(配置文件、数据交换)

  2. Excel文件自动化操作(读写、格式处理)

  3. PDF文件文本提取

  4. 实战项目:自动整理桌面文件工具

你已经掌握了Python中最强大两种数据结构,这是成为Python高手必经之路。继续加油,我们下节课再见!

记住:字典和集合是Python编程中"瑞士军刀",熟练使用它们会让你编程效率大大提高!


明扬工控商城

推荐阅读:

Python中级教程 第六课:高级特性与性能优化 2/2

Python中级教程 第六课:高级特性与性能优化 1/2

Python中级教程 第五课:异步编程与并发 2/2

Python中级教程 第五课:异步编程与并发 1/2

Python中级教程 第四课:上下文管理器、生成器与迭代器

Python中级教程 第三课:面向对象编程深入与装饰器

热门标签:
Python中级教程第一课:数据处理的瑞士军刀——字典与集合.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网