当前位置:首页>python>Python 字典:精通键值对数据结构,高效管理关联数据

Python 字典:精通键值对数据结构,高效管理关联数据

  • 2026-08-22 16:13:29
Python 字典:精通键值对数据结构,高效管理关联数据

在 Python 中,字典(Dictionary)是一种键值对(key-value) 形式的无序数据结构,就像现实中的 “字典”—— 通过 “词语(键)” 快速找到 “释义(值)”。相比于列表的 “按位置访问”,字典的 “按键访问” 更适合存储具有关联关系的数据(比如学生姓名与成绩、用户 ID 与信息)。今天就全面讲解字典的核心用法,从基础操作到实战应用,让你轻松用字典管理各类关联数据!

一、字典的定义与创建:构建 “键值对容器”

字典由若干 “键(key): 值(value)” 对组成,用{}包裹,键与值之间用冒号分隔,键值对之间用逗号分隔。键必须是不可变类型(如整数、字符串、元组),且唯一;值可以是任意数据类型(如数字、字符串、列表、甚至其他字典)。

1. 基本定义

语法:

字典名 = {键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')。

2. 用 dict () 函数创建字典

除了用{}直接创建,还可以用dict()函数通过多种方式生成字典,灵活性更高。

常用创建方式:

创建方式
语法示例
说明
结果
键值对参数
dict(name="Alice", age=25)
以 “键 = 值” 形式传参,键自动转为字符串
{'name': 'Alice', 'age': 25}
二维可迭代对象
dict([("name", "Bob"), ("age", 30)])
传入包含键值对的列表 / 元组,每个子元素是长度为 2 的可迭代对象
{'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}

实战示例:

二、字典的增删改查:灵活操作键值对

字典是 “可变数据结构”,支持对键值对进行添加、删除、修改、查询等操作,其中 “查” 和 “改” 是最常用的场景。

1. 查:获取键对应的值

字典的查询核心是 “通过键找值”,有两种常用方式:键取值和get () 方法,二者在键不存在时的行为差异显著。

(1)键取值(直接用字典[键])

语法:

字典\[键]
  • 键存在:返回对应的值;

  • 键不存在:抛出KeyError异常(程序崩溃)。

实战示例:

(2)get () 方法(推荐,更安全)

语法:

  • 键存在:返回对应的值;

  • 键不存在:返回None(默认)或指定的 “默认值”,不报错。

这是字典取值的 “优雅安全方案”,尤其适合键可能不存在的场景(如解析用户输入、读取配置文件)。

实战示例:

(3)两种取值方式对比

取值方式
键存在时
键不存在时
适用场景
键取值[key]
返回对应值
抛出 KeyError(程序崩溃)
确定键一定存在,需报错提醒错误
get () 方法
返回对应值
返回 None 或指定默认值
键可能不存在,需避免程序崩溃

(4)判断键是否存在(in/not in)

在取值前先判断键是否存在,可进一步提升代码安全性:

2. 增 / 改:添加或修改键值对

字典的 “增” 和 “改” 共用一种语法 ——键赋值,通过键是否存在自动区分:键不存在则新增,键存在则修改。

(1)键赋值(基础增改)

语法:

实战示例:

(2)update () 方法(批量增改)

当需要同时添加 / 修改多个键值对时,用update()方法更高效,支持传入字典或键值对序列。

语法:

实战示例:

3. 删:删除键值对

字典提供多种删除操作,可根据需求选择 “删除指定键”“删除随机键” 或 “清空字典”。

方法 / 语句
功能说明
示例(student_scores = {"小明":95, "小红":88, "小李":92})
结果
del 字典[键]
删除指定键的键值对,键不存在则报错 KeyError
del student_scores["小红"]{"小明":95, "小李":92}
pop(键, 默认值)
删除指定键的键值对,返回对应值;键不存在则返回默认值(不报错)
score = student_scores.pop("小李")
;score = student_scores.pop("小张", 0)
返回 92,字典变{"小明":95};返回 0,字典不变
popitem()
Python3.7+:删除最后一个键值对,返回 (键,值) 元组;3.7 前:随机删除
item = student_scores.popitem()
返回 ("小李",92),字典变{"小明":95, "小红":88}
clear()
删除所有键值对,字典变为空字典
student_scores.clear(){}

实战示例:

三、字典的遍历:逐个处理键值对

字典的遍历不像列表那样按位置,而是围绕 “键”“值”“键值对” 三种维度展开,常用for循环实现。

1. 遍历键(默认遍历方式)

直接遍历字典,默认获取的是所有键:

运行结果:

2. 遍历值(用 values () 方法)

用values()方法可直接遍历所有值(注意:值可能重复,且无法通过值反向获取键):

运行结果:

3. 遍历键值对(用 items () 方法,最常用)

用items()方法可同时获取键和值,返回的每个元素是(键, 值)形式的元组,是最灵活的遍历方式:

运行结果:

四、字典推导式:快速生成字典

字典推导式是 “通过表达式快速生成字典” 的语法糖,类似列表推导式,结构简洁、执行高效,适合从已有数据生成新字典。

1. 基本语法

  • 遍历可迭代对象中的每个变量,根据条件筛选后,用 “键表达式” 和 “值表达式” 生成键值对;

  • if条件可选,用于过滤元素。

2. 实战示例

(1)生成简单字典

(2)带条件筛选

(3)从已有字典生成新字典

(4)从两个列表生成字典

五、实战案例:学生信息管理系统(按姓名查成绩)

结合字典的增删改查和遍历操作,实现一个简单的 “学生信息管理系统”,支持 “添加成绩、修改成绩、删除成绩、按姓名查询成绩、显示所有成绩” 功能,模拟实际数据管理场景。

需求分析

  1. 初始存储若干学生的姓名与成绩;

  2. 支持添加新学生的成绩;

  3. 支持根据姓名修改已有学生的成绩;

  4. 支持根据姓名删除学生成绩;

  5. 支持根据姓名查询成绩(键不存在时提示 “未找到”);

  6. 支持显示所有学生的成绩。

代码实现

运行示例

六、字典核心知识总结

  1. 核心特性:键值对结构,键唯一且不可变,值可任意类型,Python3.7 + 有序;

  2. 增删改查:

  • 查:优先用get()(安全),确定键存在可用[key];

  • 增改:[key] = value(单个)、update()(批量);

  • 删:pop()(删指定键并返回值)、del(删指定键)、clear()(清空);

  1. 遍历方式:keys()(键)、values()(值)、items()(键值对,最常用);

  2. 高效生成:字典推导式适合从已有数据快速生成新字典;

  3. 适用场景:存储关联数据(如姓名 - 成绩、ID - 信息)、配置项管理、JSON 数据解析等。

如果想进一步学习字典的高级用法(如有序字典OrderedDict、默认字典defaultdict),或需要优化字典的查询性能,可以随时告诉我,我会为你展开更深入的讲解! 

最新文章

随机文章