图解python | 字典

简介: 字典是Python中基于键值对的可变容器,通过键快速查找值。本文以图解+实战形式详解其结构、增删改查操作及特性,并结合字符统计案例,帮助掌握字典的核心用法与应用场景。

字典是 Python 中键值对(Key-Value) 结构的无序可变容器,核心特点是 “通过键快速查找值”,就像现实中的字典(通过拼音 / 部首找汉字),下面用「图解 + 实战」拆解字典的核心逻辑。

一、字典的核心结构(图解)

1. 字典的 “物理” 结构(简化版)

plaintext

┌───────────────────────────────────────┐
│              字典 (dict)              │
│  ┌─────────┬─────────┐  ┌─────────┬─────────┐  │
│  │   键    │   值    │  │   键    │   值    │  │
│  │ (Key)   │ (Value) │  │ (Key)   │ (Value) │  │
│  ├─────────┼─────────┤  ├─────────┼─────────┤  │
│  │ "name"  │ "小明"  │  │ "age"   │  18     │  │
│  ├─────────┼─────────┤  ├─────────┼─────────┤  │
│  │ "score" │ [90,85] │  │ "is_ok" │  True   │  │
│  └─────────┴─────────┘  └─────────┴─────────┘  │
└───────────────────────────────────────┘
  • 键(Key):唯一、不可变(只能是字符串 / 数字 / 元组,不能是列表),相当于 “索引”;
  • 值(Value):可重复、可任意类型(数字 / 字符串 / 列表 / 字典等),相当于 “内容”;
  • 核心关系:1 个键对应 1 个值,键不能重复(重复会覆盖),值可以重复。

2. 字典与列表的对比(图解)

维度 字典(Dict) 列表(List)
索引方式 用 “键” 查找(如 dict["name"]) 用 “下标” 查找(如 list[0])
结构图解 {键1:值1, 键2:值2} [值1, 值2, 值3]
查找效率 快(哈希表底层,直接定位) 慢(需遍历)
有序性 Python 3.7+ 有序,3.6- 无序 始终有序

二、字典的核心操作(图解 + 代码)

1. 定义字典(创建)

python

运行

# 空字典
empty_dict = {}
# 普通字典(键值对用冒号分隔,整体用大括号)
student = {
    "name": "小明",   # 键:字符串,值:字符串
    "age": 18,       # 键:字符串,值:数字
    "score": [90, 85, 95],  # 键:字符串,值:列表
    (1,2): "坐标"    # 键:元组(不可变),值:字符串
}

图解创建过程:

plaintext

创建student字典 → 分配内存空间 → 存入键值对:
"name" → 指向 "小明"
"age" → 指向 18
"score" → 指向 [90,85,95]

2. 访问值(查)

python

运行

# 方式1:键取值(最常用)
print(student["name"])  # 输出:小明
# 方式2:get()方法(推荐,键不存在不报错)
print(student.get("age"))  # 输出:18
print(student.get("gender", "未知"))  # 键不存在,返回默认值:未知

图解取值逻辑:

plaintext

查找student["name"] → 计算"name"的哈希值 → 定位到内存中"小明"的位置 → 返回值

3. 修改 / 新增值(改 / 增)

python

运行

# 修改(键存在则覆盖值)
student["age"] = 19
# 新增(键不存在则添加新键值对)
student["gender"] = "男"

图解修改后结构:

plaintext

┌───────────────────────────────────────┐
│              student 字典             │
│  "name": "小明", "age": 19,            │
│  "score": [90,85,95], "gender": "男"  │
└───────────────────────────────────────┘

4. 删除键值对(删)

python

运行

# del 关键字
del student["score"]
# pop()方法(删除并返回值)
age = student.pop("age")
# 清空字典
student.clear()

图解删除后结构:

plaintext

删除"score"后 → student字典变为:
{"name": "小明", "age": 19, "gender": "男"}

5. 遍历字典(常用)

python

运行

student = {"name": "小明", "age": 18, "gender": "男"}
# 遍历所有键
for key in student.keys():
    print(key)  # 输出:name、age、gender
# 遍历所有值
for value in student.values():
    print(value)  # 输出:小明、18、男
# 遍历键值对(最常用)
for key, value in student.items():
    print(f"{key}: {value}")

图解遍历逻辑:

plaintext

遍历student.items() → 逐个取出键值对:
第1次:key="name", value="小明"
第2次:key="age", value=18
第3次:key="gender", value="男"

三、字典的核心特性(图解总结)

特性 说明 图解记忆
键唯一 重复键会覆盖旧值 {"a":1, "a":2} → 最终{"a":2}
键不可变 列表不能做键(可变),元组可以(不可变) {[1,2]:3} ❌ / {(1,2):3} ✅
无序(3.6-) 不保证插入顺序,3.7+ 修复为有序 3.6-:{"a":1, "b":2} 可能显示为{"b":2, "a":1}
可变 可新增 / 修改 / 删除键值对 字典内容可动态变化

四、实战案例(字典的典型用法)

案例:统计字符串中字符出现次数

python

运行

text = "hello python"
count_dict = {}
# 遍历字符,统计次数
for char in text:
    if char != " ":  # 排除空格
        # 键存在则+1,不存在则设为1
        count_dict[char] = count_dict.get(char, 0) + 1
print(count_dict)
# 输出:{'h':1, 'e':1, 'l':2, 'o':2, 'p':1, 'y':1, 't':1, 'n':1}

图解执行过程:

plaintext

初始count_dict = {}
遍历到"h" → count_dict["h"] = 0+1 → {"h":1}
遍历到"e" → count_dict["e"] = 0+1 → {"h":1, "e":1}
遍历到"l" → count_dict["l"] = 0+1 → {"h":1, "e":1, "l":1}
再次遍历到"l" → count_dict["l"] = 1+1 → {"h":1, "e":1, "l":2}
... 以此类推

总结

字典的核心是「键值对映射」,记住 3 个关键点:

  1. 键是 “唯一索引”,值是 “对应内容”;
  2. 取值优先用get()(避免键不存在报错);
  3. 适合场景:快速查找、数据关联存储(如用户信息、统计计数)。
目录
相关文章
|
8月前
|
存储 安全 Cloud Native
Rocky Linux下配置nfs
NFS(网络文件系统)是类Unix系统间分布式文件共享的核心协议,支持跨机器数据共享,广泛应用于云原生、企业文件服务。本文详解NFS在Rocky Linux下的部署:从基础概念、组件安装(nfs-utils、rpcbind)、服务器配置(/etc/exports)、防火墙设置到客户端挂载与自动加载(fstab、autofs),并提供常见问题排查方案,助力构建高效安全的共享存储环境。
|
数据可视化 前端开发 Java
打破你对Windows系统的认知?— 原来是因为图形化界面
打破你对Windows系统的认知?— 原来是因为图形化界面
760 0
|
8月前
|
Kubernetes 安全 数据库
别再把密码塞进配置文件了:聊聊从开发到生产的凭证管理,以及 SPIFFE / SPIRE 和短期凭证这条路
别再把密码塞进配置文件了:聊聊从开发到生产的凭证管理,以及 SPIFFE / SPIRE 和短期凭证这条路
372 3
|
8月前
|
供应链 容器
什么是code128码?
Code 128码是一种高密度条形码,支持全ASCII字符,广泛用于物流、运输和供应链管理。它分为A、B、C三个子集,可编码字母、数字及控制符,具有高密度、小空间优势,适用于复杂数据编码需求。
1450 3
|
8月前
|
JSON 数据可视化 API
实用程序:解放双手!Python 打造 PDF 手写模拟器,轻松搞定手写作业
一款基于Python的PDF手写模拟器,可批量将文字以逼真手写形式填入PDF指定区域。支持中英文独立配置、手写扰动效果调节、模板复用与实时预览,告别手动抄写。开源免费,操作简便,学生党必备!GitHub已开源,欢迎Star!
794 0
|
9月前
|
弹性计算 Kubernetes 安全
已上线!云监控 2.0 面向实体的全链路日志审计与风险溯源
在云端,一次 API 调用背后可能隐藏着一场数据泄露;一个异常进程背后,或许是 AK 泄露引发的链式攻击。传统日志“看得见却看不懂”,而云监控 2.0 日志审计通过 UModel 实体建模,将分散在 ACS、K8s、主机各层的日志自动串联。
597 93
|
8月前
|
机器学习/深度学习 人工智能 并行计算
DeepSeek 开年王炸:mHC 架构用流形约束重构 ResNet 残差连接
大过节DeepSeek在arXiv发布mHC新论文,挑战Transformer残差连接范式。通过流形约束(谱范数+双重随机矩阵),在保持高带宽信息通路的同时恢复恒等映射稳定性,解决深层网络梯度传播难题,理论扎实且兼顾系统效率,或成“后Transformer时代”架构新方向。
741 7
DeepSeek 开年王炸:mHC 架构用流形约束重构 ResNet 残差连接
|
人工智能 缓存 运维
探秘 AgentRun丨通过无代码创建的 Agent,如何用高代码进行更新?
AgentRun 打破 AI Agent 开发困局,无代码快速验证想法,一键转高代码实现深度定制。60 秒创建 Agent,支持多模型、工具集成与 Prompt 优化;业务增长后可平滑演进,保留配置生成高质量代码,助力从原型到生产的持续迭代。
605 31
|
人工智能 自然语言处理 安全
AI 智能体从入门到进阶再到落地完整教程
自主智能体正引领AI技术变革,依托大模型与强化学习,实现独立推理、决策与多任务协同。本书系统探讨智能体定义、类型、框架及应用,涵盖客服、医疗、金融等场景,强调可扩展性、模块化与持续学习等设计原则,并对比LangGraph、AutoGen等主流框架,助力构建高效、可靠的智能系统。
801 0