当前位置: 首页 > news >正文

Python进阶必学:字典查值、元组防改、集合去重,一文全搞定!

🐍Python进阶必学:字典查值、元组防改、集合去重,一文全搞定!

作者:着迷不白
字典、元组、集合是 Python 中三种重要的数据结构。字典提供键值对映射,元组是不可变的序列,集合用于去重集合运算。本篇带你全面掌握它们的创建与常用操作。作业 + 答案在文末,方便自测。


📖 前言

在前几篇笔记中,我们学习了字符串和列表,它们是序列类型的代表。从本篇开始,我们将学习另外三种核心数据结构:

  • 字典(dict):通过“键”来查找“值”,就像查字典一样快速。
  • 元组(tuple):与列表类似,但一旦创建就不能修改,适合存储固定数据。
  • 集合(set):无序且元素唯一,支持并集、交集等数学运算。

掌握它们,你的 Python 数据处理能力将更上一层楼。


一、字典(dict)

字典是一种键值对(key-value)的映射结构,使用大括号{},键与值之间用冒号:分隔,键值对之间用逗号,分隔。键必须唯一且不可变(通常用字符串、数字),值可以是任意类型。

为什么需要字典?

对比列表:列表只能通过下标访问元素,无法表达数据的“含义”;字典通过有意义的键来获取值,代码更清晰。

# 列表方式(无法直接看出 98 是什么成绩) list1 = ["语文", 98, "数学", 96, "英语", 100] print(list1[1]) # 98 # 字典方式(一目了然) dict1 = {"语文": 98, "数学": 96, "英语": 100} print(dict1["语文"]) # 98

✅ 字典的创建

# 方式1:大括号直接创建 person = {'name': 'Alice', 'age': 25, 'city': 'New York'} # 方式2:使用 dict() 构造函数 person2 = dict(name='Bob', age=30) # 方式3:两个列表拼成字典(使用 zip) keys = ['name', 'age', 'city'] values = ['charlie', 35, 'chicago'] dict3 = dict(zip(keys, values)) print(dict3) # {'name': 'charlie', 'age': 35, 'city': 'chicago'}

✅ 获取字典元素

print(person['name']) # Alice(如果键不存在会报错 KeyError) print(person.get('age')) # 25(键不存在返回 None,不报错)

✅ 修改与添加元素

# 修改已存在的键 person['age'] = 26 # 添加新键值对(直接赋值不存在的键) person['email'] = 'alice@example.com' print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York', 'email': 'alice@example.com'}

✅ 删除元素

# del 语句 del person['city'] # pop() 方法:删除并返回对应的值 email = person.pop('email') print(email) # alice@example.com

✅ 字典常用方法

方法

作用

keys()

返回所有键(可遍历)

values()

返回所有值

items()

返回所有键值对(元组形式)

get(key)

安全获取值,不存在返回 None

pop(key)

删除指定键并返回值

update(other)

用另一个字典更新当前字典

copy()

浅拷贝

✅ 综合练习:个人信息管理

# 1. 创建字典 person = {'name': 'David', 'age': 40, '职业': '工程师'} # 2. 获取名字 print("Name:", person['name']) # 3. 修改年龄 person['age'] = 41 print("Updated Age:", person['age']) # 4. 添加邮箱 person['email'] = 'david@example.com' print("Email:", person['email']) # 5. 删除职业 del person['职业'] print("删除后的个人信息:", person) # 6. 批量更新 person.update({'name': 'David Smith', '城市': '旧金山'}) print("更新后的信息:", person)

二、元组(tuple)

元组是不可变的序列,用圆括号()表示。一旦创建,就不能添加、删除或修改其中的元素。适合存储坐标、日期等固定数据。

✅ 创建元组

# 包含多个元素 tuple1 = (1, 2, 3) # 空元组 tuple2 = () # 单个元素的元组(注意逗号!) tuple3 = (4,) # 如果不加逗号,会被当作整数 4 print(type(tuple3)) # <class 'tuple'>

✅ 访问与切片(与列表类似)

tuple5 = (12, 13, 14, 15, 16) print(tuple5[1]) # 13 print(tuple5[1:4]) # (13, 14, 15) print(len(tuple5)) # 5

✅ 不可变性(重点)

tuple7 = (20, 21, 22) # tuple7[0] = 23 # 会引发 TypeError: 'tuple' object does not support item assignment

✅ 其他操作

# 将列表转换为元组 list_to_tuple = tuple([6, 7, 8, 9]) print(list_to_tuple) # (6, 7, 8, 9)

三、集合(set)

集合是无序元素唯一的数据结构,用大括号{}表示,但不能是空的(空{}是字典)。集合常用于去重和集合运算(并集、交集、差集)。

✅ 创建集合

# 使用大括号 set1 = {1, 2, 3, 4, 5} # 使用 set() 函数(可去重) set2 = set([1, 2, 2, 3, 4, 4, 5]) # {1, 2, 3, 4, 5} # 空集合(必须用 set(),不能用 {}) empty_set = set()

✅ 集合的基本操作

# 添加元素 set1.add(6) # 删除元素(如果元素不存在会报错 KeyError) set1.remove(3) # 清空集合 set1.clear() # 判断元素是否存在 print(4 in set2) # True

✅ 集合的数学运算

setA = {1, 2, 3, 4} setB = {3, 4, 5, 6} # 并集(所有元素) print(setA | setB) # {1, 2, 3, 4, 5, 6} # 交集(共同元素) print(setA & setB) # {3, 4} # 差集(在A但不在B) print(setA - setB) # {1, 2}

✅ 常用方法

方法

作用

add(element)

添加元素

remove(element)

删除元素(不存在则报错)

discard(element)

删除元素(不存在不报错)

pop()

随机移除并返回一个元素

clear()

清空集合

✅ 综合练习

setA = {1, 2, 3, 4} setB = {3, 4, 5, 6} setA.add(7) print("添加之后:", setA) # {1, 2, 3, 4, 7} setA.remove(2) print("删除之后:", setA) # {1, 3, 4, 7} print("并集:", setA | setB) # {1, 3, 4, 5, 6, 7} print("交集:", setA & setB) # {3, 4} print("差集:", setA - setB) # {1, 7}

作业(请先独立完成,再对照答案)

一、单选题

  1. 下列关于列表下标取值的说法,正确的是( )
    A. 列表下标只能从 0 开始正向取值,不能反向(如 -1)
    B. 嵌套列表l = [1, [2, [3]]]中,取3的写法是l[1][1][0]
    C. 列表下标越界不会报错
    D. 列表['a', 'b']中,列表为[2]会返回空值
  2. 执行l = [11,22,33]; l.append(44); l.insert(1,55)后,列表l的结果是( )
    A.[11,55,22,33,44]
    B.[55,11,22,33,44]
    C.[11,22,33,55,44]
    D.[11,22,55,33,44]
  3. 字典d = {'name':'maiya', 'age':18},下列操作错误的是( )
    A.print(d['name'])
    B.d['gender'] = '女'
    C.print(d[0])
    D.del d['age']
  4. 关于元组的特性,描述正确的是( )
    A. 元组支持append()函数添加元素
    B. 元组(10)和表示存储一个数据
    C. 元组支持下标取值,但不支持切片
    D. 元组一旦定义,内部元素无法修改
  5. 字典d = {'a':1, 'b':2, 'a':3},打印d['a']的结果是( )
    A. 1
    B. 2
    C. 3
    D. 报错

二、编程题

  1. 定义列表l = [5, 8, 2, 9, 1, 8],完成以下操作:
    a. 删除列表中所有的数字8
    b. 在列表末尾添加数字10
    c. 将列表中索引为2的元素修改为7
    d. 打印最终的列表。
  2. 定义字典student = {'name':'张三', 'score':85, 'gender':'男'},完成以下操作:
    a. 新增键值对'age':18
    b. 将分数(score)修改为90
    c. 删除性别(gender)键值对;
    d. 打印字典中所有的键和所有的值。
  3. (选做题)定义嵌套列表l = ['python', ['java', ['c++', 'javascript'], 'php'], 'ruby'],通过下标取值提取出javascript并打印。

作业答案

单选题答案

题号

答案

解析

1

B

A:列表支持负下标(如 -1);C:下标越界会报错;D:[2]越界报错。B:l[1][2, [3]][1][3][0]3,正确。

2

A

初始[11,22,33]append(44)[11,22,33,44]insert(1,55)→ 在下标1插入55 →[11,55,22,33,44]

3

C

字典通过键访问,不能通过整数下标(d[0]会报错)。

4

D

元组不可变。A 错误(无 append);B 错误:(10)是整数,正确单元素元组应为(10,);C 错误:元组支持切片。

5

C

字典的键必须唯一,如果重复定义,后面的值会覆盖前面的,所以'a'最终为 3。

编程题答案

1. 列表操作

l = [5, 8, 2, 9, 1, 8] # a. 删除所有 8(使用循环,注意删除时倒序或用 while) while 8 in l: l.remove(8) # b. 末尾添加 10 l.append(10) # c. 修改索引 2 的元素为 7 l[2] = 7 # d. 打印 print(l) # [5, 2, 7, 1, 10]

2. 字典操作

student = {'name': '张三', 'score': 85, 'gender': '男'} # a. 新增 age student['age'] = 18 # b. 修改分数 student['score'] = 90 # c. 删除 gender del student['gender'] # d. 打印所有键和所有值 print("键:", student.keys()) print("值:", student.values())

3. 嵌套列表取值(选做题)

l = ['python', ['java', ['c++', 'javascript'], 'php'], 'ruby'] # javascript 在 l[1][1][1] print(l[1][1][1]) # javascript

📝 总结

本篇笔记涵盖了字典、元组、集合的核心知识:

  • 字典:键值对映射,通过键快速取值。常用操作:增删改查、keys()values()items()
  • 元组:不可变序列,适用于固定数据。注意单元素元组需要逗号。
  • 集合:无序、元素唯一,支持去重和数学运算(并集|、交集&、差集-)。

这三种数据结构在实际开发中使用频率极高,请结合练习题加深理解。

📌 如果觉得有帮助,欢迎收藏或分享给一起学习 Python 的小伙伴~
🔜下一篇预告:条件判断与循环 —— 让程序学会“思考”和“重复”。

©着迷不白— 人生苦短,我用 Python

http://www.jsqmd.com/news/1294082/

相关文章:

  • OBS插件革命:Spout2如何实现视频共享的质变飞跃
  • 2026年PaperPass AI检测达标指南:PaperPass AI率超标4.8元完整处理方案 - 还在做实验的师兄
  • 华为云6分钟快速部署OpenClaw自动化工具指南
  • 中小卖家发欧洲:别盲目跟风空运,卡航才是性价比之王
  • 画图是一个理解抽象的好方法
  • AI诊断准确率超99.2%?揭秘三甲医院真实部署数据:从影像识别到病理判读的12个月落地路径
  • AI论文工具全解析:提升科研效率的12款神器
  • 一、Ubuntu 26.04安装 Nvidia 驱动,comfyui实现漫剧工作流,我来学习了
  • 新手养虾指南:小型水族箱生态系统建立与维护
  • 2026 合肥团建租车 旅游租车挑选指南,本地实测避坑干货 - LYL仔仔
  • 2026年7月上海电子销毁Top1推荐:赛奈废旧物资回收怎么样?
  • FPGA开发入门:从Verilog编程到板级调试的完整实验指南
  • 公证户口本需要什么材料?证天下小程序全流程线上办 - 信息快递
  • GetQzonehistory:你的数字记忆保险箱,三步实现QQ空间完整备份
  • 腾讯资深Android面经:插件化框架、热修复原理、动态下发、模块化路由
  • Nuke Survival Toolkit:企业级影视特效合成解决方案与150+专业Gizmo插件架构设计
  • UE5行为树实战:打造会“摸鱼”的智能巡逻AI
  • 菜谱搜索转化率暴跌42%?紧急发布AI推荐算法热修复补丁(含可复用Prompt模板库)
  • APK解析实战指南:深入Android应用内部结构的完整方案
  • 梵克雅宝首饰回收2026沧州市指南 毓典寄卖行奢品回收实体门店 - 毓典寄卖行
  • 16级缓存架构与AXI总线接口设计实现详解
  • AI搜索代码问题:2024最稀缺的5类调试能力(非LLM调参!而是代码意图建模+运行时约束注入)——附可落地的VS Code插件配置包
  • 10分钟掌握amis低代码框架:告别深夜运维的终极可视化配置指南 [特殊字符]
  • 3步终极指南:一键解决Windows无法识别苹果设备的驱动问题
  • 经济学论文降AI工具免费推荐:2026年经济学毕业论文降AI4.8元亲测完整方案
  • 海盗船RM650x电源热敏电阻维修与继电器加装实战指南
  • 有没有不需要复杂操作的经期记录工具?2026年实测分享 - 软件测评小帮手
  • QQ音乐解析工具终极指南:三步获取无损音乐和MV资源
  • 如何3分钟掌握RevokeMsgPatcher:Windows消息防撤回的终极指南
  • 3分钟掌握Blender VRM插件:从零开始创建专业虚拟角色