字典通过键快速查找值,键唯一且不可变;元组创建后不可修改,适合存储固定数据;集合元素无序且唯一,支持并集、交集等数学运算。这三种结构是Python数据处理的核心工具,广泛应用于数据映射、固定数据存储及去重场景。
在前几篇笔记中,我们讨论了字符串和列表,它们都属于序列类型。从本篇开始,我们将深入探讨另外三种核心数据结构:字典、元组和集合。它们各自拥有独特的特性——字典通过键来查找值,元组一旦创建便不可修改,而集合天生具备去重功能。掌握这些数据结构,能够显著提升你的Python数据处理能力。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
接下来,我们逐一拆解。
字典本质上是一种键值对(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': 'Da vid', 'age': 40, '职业': '工程师'}
# 2. 获取名字
print("Name:", person['name'])
# 3. 修改年龄
person['age'] = 41
print("Updated Age:", person['age'])
# 4. 添加邮箱
person['email'] = 'da vid@example.com'
print("Email:", person['email'])
# 5. 删除职业
del person['职业']
print("删除后的个人信息:", person)
# 6. 批量更新
person.update({'name': 'Da vid Smith', '城市': '旧金山'})
print("更新后的信息:", person)
元组是一种不可变的序列,使用圆括号 () 表示。一旦创建,就无法再添加、删除或修改其中的元素。这种“固定”的特性,使其非常适合存储坐标、日期等恒定不变的数据。
# 包含多个元素 tuple1 = (1, 2, 3) # 空元组 tuple2 = () # 单个元素的元组(注意逗号!) tuple3 = (4,) # 如果不加逗号,会被当作整数 4 print(type(tuple3)) #
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)
集合是一种无序、元素唯一的数据结构,使用大括号 {} 表示,但不能是空的——空 {} 会被视为字典。集合最常见的用途是去重和集合运算(并集、交集、差集)。
# 使用大括号
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.下列关于列表下标取值的说法,正确的是( )
l = [1, [2, [3]]] 中,取 3 的写法是 l[1][1][0]['a', 'b'] 中,列表为 [2] 会返回空值2.执行 l = [11,22,33]; l.append(44); l.insert(1,55) 后,列表 l 的结果是( )
[11,55,22,33,44][55,11,22,33,44][11,22,33,55,44][11,22,55,33,44]3.字典 d = {'name':'maiya', 'age':18},下列操作错误的是( )
print(d['name'])d['gender'] = '女'print(d[0])del d['age']4.关于元组的特性,描述正确的是( )
append() 函数添加元素(10) 和表示存储一个数据5.字典 d = {'a':1, 'b':2, 'a':3},打印 d['a'] 的结果是( )
1.定义列表 l = [5, 8, 2, 9, 1, 8],完成以下操作:
8;10;2 的元素修改为 7;2.定义字典 student = {'name':'张三', 'score':85, 'gender':'男'},完成以下操作:
'age':18;score)修改为 90;gender)键值对;(选做题)定义嵌套列表 l = ['python', ['ja va', ['c++', 'ja vascript'], 'php'], 'ruby'],通过下标取值提取出 ja vascript 并打印。
| 题号 | 答案 | 解析 |
| 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', ['ja va', ['c++', 'ja vascript'], 'php'], 'ruby'] # ja vascript 在 l[1][1][1] print(l[1][1][1]) # ja vascript
本篇笔记系统梳理了字典、元组、集合的核心知识点:
keys()、values()、items()。|、交集 &、差集 -)。这三种数据结构在实际开发中应用广泛,建议结合练习题多加练习,将知识内化为自己的技能。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述