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
✅ 字典常用方法
|
方法 |
作用 |
|
|
返回所有键(可遍历) |
|
|
返回所有值 |
|
|
返回所有键值对(元组形式) |
|
|
安全获取值,不存在返回 None |
|
|
删除指定键并返回值 |
|
|
用另一个字典更新当前字典 |
|
|
浅拷贝 |
✅ 综合练习:个人信息管理
# 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}
✅ 常用方法
|
方法 |
作用 |
|
|
添加元素 |
|
|
删除元素(不存在则报错) |
|
|
删除元素(不存在不报错) |
|
|
随机移除并返回一个元素 |
|
|
清空集合 |
✅ 综合练习
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}
作业(请先独立完成,再对照答案)
一、单选题
- 下列关于列表下标取值的说法,正确的是( )
A. 列表下标只能从 0 开始正向取值,不能反向(如 -1)
B. 嵌套列表l = [1, [2, [3]]]中,取3的写法是l[1][1][0]
C. 列表下标越界不会报错
D. 列表['a', 'b']中,列表为[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] - 字典
d = {'name':'maiya', 'age':18},下列操作错误的是( )
A.print(d['name'])
B.d['gender'] = '女'
C.print(d[0])
D.del d['age'] - 关于元组的特性,描述正确的是( )
A. 元组支持append()函数添加元素
B. 元组(10)和表示存储一个数据
C. 元组支持下标取值,但不支持切片
D. 元组一旦定义,内部元素无法修改 - 字典
d = {'a':1, 'b':2, 'a':3},打印d['a']的结果是( )
A. 1
B. 2
C. 3
D. 报错
二、编程题
- 定义列表
l = [5, 8, 2, 9, 1, 8],完成以下操作:
a. 删除列表中所有的数字8;
b. 在列表末尾添加数字10;
c. 将列表中索引为2的元素修改为7;
d. 打印最终的列表。 - 定义字典
student = {'name':'张三', 'score':85, 'gender':'男'},完成以下操作:
a. 新增键值对'age':18;
b. 将分数(score)修改为90;
c. 删除性别(gender)键值对;
d. 打印字典中所有的键和所有的值。 - (选做题)定义嵌套列表
l = ['python', ['java', ['c++', 'javascript'], 'php'], 'ruby'],通过下标取值提取出javascript并打印。
作业答案
单选题答案
|
题号 |
答案 |
解析 |
|
1 |
B |
A:列表支持负下标(如 -1);C:下标越界会报错;D: |
|
2 |
A |
初始 |
|
3 |
C |
字典通过键访问,不能通过整数下标( |
|
4 |
D |
元组不可变。A 错误(无 append);B 错误: |
|
5 |
C |
字典的键必须唯一,如果重复定义,后面的值会覆盖前面的,所以 |
编程题答案
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
更多推荐




所有评论(0)