在 Python 中,字典(Dictionary)是一种键值对(key-value) 形式的无序数据结构,就像现实中的 “字典”—— 通过 “词语(键)” 快速找到 “释义(值)”。相比于列表的 “按位置访问”,字典的 “按键访问” 更适合存储具有关联关系的数据(比如学生姓名与成绩、用户 ID 与信息)。今天就全面讲解字典的核心用法,从基础操作到实战应用,让你轻松用字典管理各类关联数据!
字典由若干 “键(key): 值(value)” 对组成,用{}包裹,键与值之间用冒号分隔,键值对之间用逗号分隔。键必须是不可变类型(如整数、字符串、元组),且唯一;值可以是任意数据类型(如数字、字符串、列表、甚至其他字典)。
语法:
字典名 = {键1: 值1, 键2: 值2, 键3: 值3, ...}实战示例:
\# 1. 存储学生姓名与成绩(字符串为键,整数为值)student\_scores = {"小明": 95, "小红": 88, "小李": 92}\# 2. 存储用户信息(混合类型键值对)user\_info = {1001: "张三", "age": 22, "is\_student": True, "hobbies": \["阅读", "编程"]}\# 3. 空字典(后续可添加键值对)empty\_dict = {}\# 4. 嵌套字典(字典中包含字典,存储多维度信息)class\_info = {  "班级": "高一(1)班",  "人数": 45,  "学生代表": {"姓名": "小明", "学号": 1001}}print("学生成绩字典:", student\_scores) # 输出:{'小明': 95, '小红': 88, '小李': 92}print("用户信息字典:", user\_info) # 输出:{1001: '张三', 'age': 22, 'is\_student': True, 'hobbies': \['阅读', '编程']}print("嵌套字典:", class\_info) # 输出:{'班级': '高一(1)班', '人数': 45, '学生代表': {'姓名': '小明', '学号': 1001}}注意:
键的唯一性:如果创建时出现重复键,后定义的键值对会覆盖前面的(比如{"a":1, "a":2}最终为{"a":2});
键的不可变性:列表等可变类型不能作为键(比如{[1,2]: "错误"}会报错TypeError: unhashable type: 'list')。
除了用{}直接创建,还可以用dict()函数通过多种方式生成字典,灵活性更高。
dict(name="Alice", age=25) | {'name': 'Alice', 'age': 25} | ||
dict([("name", "Bob"), ("age", 30)]) | {'name': 'Bob', 'age': 30} | ||
dict((k, k*2) for k in range(3)) | {0:0, 1:2, 2:4} | ||
dict({"a":1, "b":2}) | {'a':1, 'b':2} |
实战示例:
字典是 “可变数据结构”,支持对键值对进行添加、删除、修改、查询等操作,其中 “查” 和 “改” 是最常用的场景。
字典的查询核心是 “通过键找值”,有两种常用方式:键取值和get () 方法,二者在键不存在时的行为差异显著。
字典[键])语法:
字典\[键]键存在:返回对应的值;
键不存在:抛出KeyError异常(程序崩溃)。
实战示例:
语法:
键存在:返回对应的值;
键不存在:返回None(默认)或指定的 “默认值”,不报错。
这是字典取值的 “优雅安全方案”,尤其适合键可能不存在的场景(如解析用户输入、读取配置文件)。
实战示例:
[key] | |||
in/not in)在取值前先判断键是否存在,可进一步提升代码安全性:
字典的 “增” 和 “改” 共用一种语法 ——键赋值,通过键是否存在自动区分:键不存在则新增,键存在则修改。
语法:
实战示例:
当需要同时添加 / 修改多个键值对时,用update()方法更高效,支持传入字典或键值对序列。
语法:
实战示例:
字典提供多种删除操作,可根据需求选择 “删除指定键”“删除随机键” 或 “清空字典”。
del 字典[键] | del student_scores["小红"] | {"小明":95, "小李":92} | |
pop(键, 默认值) | score = student_scores.pop("小李")score = student_scores.pop("小张", 0) | {"小明":95};返回 0,字典不变 | |
popitem() | item = student_scores.popitem() | {"小明":95, "小红":88} | |
clear() | student_scores.clear() | {} |
实战示例:
字典的遍历不像列表那样按位置,而是围绕 “键”“值”“键值对” 三种维度展开,常用for循环实现。
直接遍历字典,默认获取的是所有键:
运行结果:
用values()方法可直接遍历所有值(注意:值可能重复,且无法通过值反向获取键):
运行结果:
用items()方法可同时获取键和值,返回的每个元素是(键, 值)形式的元组,是最灵活的遍历方式:
运行结果:
字典推导式是 “通过表达式快速生成字典” 的语法糖,类似列表推导式,结构简洁、执行高效,适合从已有数据生成新字典。
遍历可迭代对象中的每个变量,根据条件筛选后,用 “键表达式” 和 “值表达式” 生成键值对;
if条件可选,用于过滤元素。
结合字典的增删改查和遍历操作,实现一个简单的 “学生信息管理系统”,支持 “添加成绩、修改成绩、删除成绩、按姓名查询成绩、显示所有成绩” 功能,模拟实际数据管理场景。
初始存储若干学生的姓名与成绩;
支持添加新学生的成绩;
支持根据姓名修改已有学生的成绩;
支持根据姓名删除学生成绩;
支持根据姓名查询成绩(键不存在时提示 “未找到”);
支持显示所有学生的成绩。
核心特性:键值对结构,键唯一且不可变,值可任意类型,Python3.7 + 有序;
增删改查:
查:优先用get()(安全),确定键存在可用[key];
增改:[key] = value(单个)、update()(批量);
删:pop()(删指定键并返回值)、del(删指定键)、clear()(清空);
遍历方式:keys()(键)、values()(值)、items()(键值对,最常用);
高效生成:字典推导式适合从已有数据快速生成新字典;
适用场景:存储关联数据(如姓名 - 成绩、ID - 信息)、配置项管理、JSON 数据解析等。
如果想进一步学习字典的高级用法(如有序字典OrderedDict、默认字典defaultdict),或需要优化字典的查询性能,可以随时告诉我,我会为你展开更深入的讲解!