上一期我们吃透了Python元组的定义与不可变特性,掌握了“不可修改”数据的存储技巧,知道了元组适合存放固定不变的常量、配置信息。
而今天,我们要解锁Python容器家族中“最灵活、最常用”的成员——字典(Dictionary),它也是实战中出场率最高的容器类型。不同于列表的索引访问、元组的不可变特性,字典以“键值对”为核心,能实现数据的快速查找与灵活操作,今天就聚焦字典的核心用法——增删改查与访问,全程干货案例,新手看完直接上手,轻松搞定字典操作!
很多新手刚接触字典,会觉得“键值对”不好理解,其实特别简单:字典就像一本真实的字典,“键(key)”就是字典里的“关键词”,“值(value)”就是关键词对应的“解释”,通过关键词就能快速找到对应解释,这就是字典的核心优势——高效查找,灵活操作。
📌 先回顾:字典的基础定义
在讲增删改查之前,先快速回顾字典的基础定义,避免新手混淆:
字典是Python中常用的可变容器,用大括号 {} 包裹,内部由多个“键值对”组成,键和值之间用冒号 : 分隔,多个键值对之间用逗号 , 分隔。
# 字典基础定义格式字典名 = {键1: 值1, 键2: 值2, 键3: 值3, ...}# 实战案例(最常用场景)# 案例1:存放用户信息(键是属性,值是对应信息)user_info = {"name": "小明", "age": 20, "gender": "男", "hobby": "Python"}# 案例2:存放商品信息(键是商品属性,值是对应数据)goods_info = {"name": "Python入门教程", "price": 39.9, "author": "编程君", "sales": 1000}# 案例3:空字典(后续动态添加键值对)empty_dict = {}
小提醒:字典的“键(key)”必须是不可变类型(比如字符串、数字、元组),不能是列表、字典等可变类型;“值(value)”没有任何限制,可以是任意类型(字符串、数字、列表、甚至字典)。
🔧 核心用法:字典的访问(3种方式,必掌握)
字典的访问核心是“通过键找值”,这也是它和列表、元组最大的区别(列表/元组通过索引访问),推荐3种常用方式,按需选择,重点掌握前2种。
(1)方式1:通过“键”直接访问
语法:字典名[键],直接通过键就能获取对应的值,适合明确知道键名的场景。
# 定义一个用户信息字典user_info = {"name": "小明", "age": 20, "gender": "男", "hobby": "Python"}# 通过键访问对应值print(user_info["name"]) # 输出:小明(键"name"对应的值)print(user_info["age"]) # 输出:20(键"age"对应的值)print(user_info["hobby"]) # 输出:Python(键"hobby"对应的值)# 注意:如果键不存在,会直接报错(新手必避坑)# print(user_info["height"]) # 报错:KeyError: 'height'
(2)方式2:用get()方法访问
语法:字典名.get(键, 默认值),和直接访问相比,最大优势是“键不存在时不会报错”,会返回默认值(默认值可省略,省略时返回None)。
user_info = {"name": "小明", "age": 20, "gender": "男", "hobby": "Python"}# 正常访问(键存在)print(user_info.get("name")) # 输出:小明print(user_info.get("age", 18)) # 输出:20(键存在,返回对应值,默认值无效)# 键不存在(不会报错)print(user_info.get("height")) # 输出:None(省略默认值,返回None)print(user_info.get("height", 175)) # 输出:175(键不存在,返回设置的默认值)
(3)方式3:访问所有键、所有值、所有键值对
实战中,常需要批量获取字典的所有键、所有值或所有键值对,用3个内置方法即可实现,用法简单:
user_info = {"name": "小明", "age": 20, "gender": "男", "hobby": "Python"}# 1. 获取所有键(keys()方法)print(user_info.keys()) # 输出:dict_keys(['name', 'age', 'gender', 'hobby'])# 转换为列表(更易操作)print(list(user_info.keys())) # 输出:['name', 'age', 'gender', 'hobby']# 2. 获取所有值(values()方法)print(user_info.values()) # 输出:dict_values(['小明', 20, '男', 'Python'])print(list(user_info.values())) # 输出:['小明', 20, '男', 'Python']# 3. 获取所有键值对(items()方法,最常用,适合遍历)print(user_info.items()) # 输出:dict_items([('name', '小明'), ('age', 20), ('gender', '男'), ('hobby', 'Python')])# 遍历所有键值对(实战常用)for key, value in user_info.items(): print(f"{key}: {value}")# 输出结果:# name: 小明# age: 20# gender: 男# hobby: Python
🔨 核心操作:字典的增删改
字典是“可变容器”,支持灵活添加、修改、删除键值对,以下操作均结合实战案例,看完就能套用,重点记语法和使用场景。
一、新增键值对(2种方式,按需使用)
新增的核心逻辑:给字典中“不存在的键”赋值,即可添加新的键值对;如果键已存在,会变成“修改操作”(后面会讲)。
方式1:直接赋值(最常用,简洁)
语法:字典名[新键] = 新值
# 定义一个空字典,后续新增键值对user_info = {}# 新增单个键值对user_info["name"] = "小明"user_info["age"] = 20user_info["hobby"] = "Python"print(user_info) # 输出:{'name': '小明', 'age': 20, 'hobby': 'Python'}# 新增多个键值对(直接连续赋值)user_info["gender"] = "男"user_info["height"] = 175print(user_info) # 输出:{'name': '小明', 'age': 20, 'hobby': 'Python', 'gender': '男', 'height': 175}
方式2:用update()方法(适合批量新增/合并)
语法:字典名.update(新字典/键值对),可一次性新增多个键值对,也可合并两个字典。
user_info = {"name": "小明", "age": 20}# 1. 批量新增键值对(传入新字典)user_info.update({"gender": "男", "hobby": "Python", "height": 175})print(user_info) # 输出:{'name': '小明', 'age': 20, 'gender': '男', 'hobby': 'Python', 'height': 175}# 2. 合并两个字典(将dict2的键值对新增到dict1中)dict1 = {"a": 1, "b": 2}dict2 = {"c": 3, "d": 4}dict1.update(dict2)print(dict1) # 输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4}# 注意:如果update()中的键已存在,会覆盖原有的值user_info.update({"age": 21, "hobby": "编程"})print(user_info) # 输出:{'name': '小明', 'age': 21, 'gender': '男', 'hobby': '编程', 'height': 175}
二、修改键值对(2种方式,和新增逻辑互通)
修改的核心逻辑:给字典中“已存在的键”重新赋值,即可修改对应的值;本质和“新增”语法一致,区别在于键是否存在。
方式1:直接赋值(最常用)
语法:字典名[已存在的键] = 新值
user_info = {"name": "小明", "age": 20, "hobby": "Python", "height": 175}# 修改单个键值对(键已存在)user_info["age"] = 21 # 修改"age"的值为21user_info["hobby"] = "编程" # 修改"hobby"的值为"编程"print(user_info) # 输出:{'name': '小明', 'age': 21, 'hobby': '编程', 'height': 175}
方式2:用update()方法(适合批量修改)
语法和新增一致,传入包含“已存在键”的字典,即可批量修改对应的值。
user_info = {"name": "小明", "age": 21, "hobby": "编程", "height": 175}# 批量修改键值对user_info.update({"age": 22, "height": 176, "gender": "男"})# 说明:"age"和"height"是已存在的键(修改),"gender"是新键(新增)print(user_info) # 输出:{'name': '小明', 'age': 22, 'hobby': '编程', 'height': 176, 'gender': '男'}
三、删除键值对(3种方式,按需选择)
删除的核心逻辑:根据“键”删除对应的键值对,常用3种方式,各有特点,重点掌握前2种。
方式1:用del语句(最常用,彻底删除)
语法:del 字典名[键],删除指定键对应的键值对;如果键不存在,会报错。
user_info = {"name": "小明", "age": 22, "hobby": "编程", "height": 176, "gender": "男"}# 删除单个键值对del user_info["height"] # 删除"height"对应的键值对print(user_info) # 输出:{'name': '小明', 'age': 22, 'hobby': '编程', 'gender': '男'}# 注意:删除不存在的键,会报错# del user_info["weight"] # 报错:KeyError: 'weight'
方式2:用pop()方法(删除并返回值,实用)
语法:字典名.pop(键, 默认值),删除指定键对应的键值对,同时返回该键的值;键不存在时,返回默认值(不会报错),适合需要“删除并使用该值”的场景。
user_info = {"name": "小明", "age": 22, "hobby": "编程", "gender": "男"}# 删除并返回值(键存在)hobby = user_info.pop("hobby")print(hobby) # 输出:编程(返回删除的键对应的值)print(user_info) # 输出:{'name': '小明', 'age': 22, 'gender': '男'}# 键不存在(不会报错,返回默认值)weight = user_info.pop("weight", 60)print(weight) # 输出:60(返回默认值)print(user_info) # 字典无变化
方式3:用clear()方法(清空整个字典)
语法:字典名.clear(),删除字典中所有的键值对,清空后变成空字典,适合需要“重置字典”的场景。
user_info = {"name": "小明", "age": 22, "gender": "男"}# 清空整个字典user_info.clear()print(user_info) # 输出:{}(空字典)
❌ 避坑指南
避坑1:用“索引”访问字典—— 误以为字典和列表一样用索引访问,比如user_info[0],会直接报错(字典只能通过“键”访问);
避坑2:键不存在仍直接访问—— 用“字典名[键]”访问时,键不存在会报KeyError,新手建议优先用get()方法(安全不报错);
避坑3:使用可变类型作为键—— 字典的键必须是不可变类型(字符串、数字、元组),不能用列表、字典作为键,否则报错;
避坑4:修改/删除不存在的键—— 用del、直接赋值修改时,键不存在会报错,可先判断键是否存在,或用get()/pop()的默认值功能;
避坑5:混淆“新增”和“修改”—— 键不存在时赋值是“新增”,键存在时赋值是“修改”,不要误以为赋值就是新增。
📝 核心总结
字典核心:以“键值对”存储,用大括号{}定义,键不可变、值任意,优势是高效查找、灵活可变;
访问方式:3种,重点掌握“直接通过键访问”和“get()方法访问”(新手优先用get(),安全不报错);
增删改操作:新增用“赋值”或update(),修改用“重新赋值”或update(),删除用del、pop()、clear(),按需选择;
新手避坑:不混用索引和键、优先用get()访问、不使用可变类型作为键、注意新增和修改的区别。
字典是Python实战中最常用的容器类型,不管是存放用户信息、商品数据,还是处理复杂的配置信息,都离不开它。掌握今天的增删改查与访问技巧,就能应对80%的字典使用场景。
后续我们会讲解字典的进阶用法(嵌套字典、字典推导式),关注我,每天学一点Python干货,从新手逐步成长为编程达人!
字典操作有技巧,键值对应要记牢;增删改查很灵活,避坑指南不能少。