news 2026/4/16 13:18:28

Python学习之路-字典(Dictionary)学习详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python学习之路-字典(Dictionary)学习详解

Python 学习之路 —— 字典(dict)详解
(从零基础到能熟练使用常见场景,2025-2026 风格写法)

字典是 Python 中使用频率极高的数据结构,几乎可以说是“Python 程序员的瑞士军刀”。

一、字典的核心概念(一句话总结)

无序(3.7+ 有序)、可变、键值对映射
键(key) → 值(value)的映射关系
键必须是不可变类型,值可以是任意类型

# 最直观的理解方式d={"name":"小明","age":18,"is_student":True,"scores":[88,92,95],"address":{"city":"上海","street":"浦东新区"}}

二、创建字典的 7 种常见写法(按使用频率排序)

序号写法适用场景Python 版本要求
1{k1:v1, k2:v2}最常用、最直观全版本
2dict()+ 关键字参数键是合法标识符时很简洁全版本
3dict([("k1",v1), ("k2",v2)])从列表/元组对创建全版本
4{k:v for k,v in 可迭代对象}字典推导式(最强大)3.0+
5dict.fromkeys(keys, default)快速创建大量相同默认值的键全版本
6dict(zip(keys, values))两个等长列表/元组合并成字典全版本
7collections.defaultdict访问不存在的key时自动创建默认值需要 import
# 写法对比示例d1={"a":1,"b":2,"c":3}d2=dict(a=1,b=2,c=3)# 注意这里键不用加引号d3=dict([("x",10),("y",20)])d4={k:k*2forkinrange(5)}# {0:0, 1:2, 2:4, 3:6, 4:8}d5=dict.fromkeys(["name","age","city"],None)# 常用于初始化模板d6=dict(zip(["id","name","score"],[1001,"Tom",88.5]))fromcollectionsimportdefaultdict d7=defaultdict(int)# 不存在的键默认返回 0d7["count"]+=1

三、字典最常用的 12 个操作(强烈建议背下来)

操作类型写法示例说明 / 常见用途是否修改原字典
新增/修改d["new_key"] = value最常用写法
新增/修改d.update({"k1":v1, "k2":v2})批量更新,可传入 dict/列表/关键字参数
获取d["key"]键不存在 → KeyError
获取(安全)d.get("key", 默认值)键不存在返回默认值(默认 None)
获取(安全)d.setdefault("key", 默认值)不存在则设置默认值并返回是(可能)
删除del d["key"]键不存在 → KeyError
删除d.pop("key", 默认值)键不存在返回默认值(默认引发 KeyError)
删除并清空d.popitem()3.7+ 删除并返回最后一对(LIFO)
清空d.clear()清空所有元素
长度len(d)键值对数量
成员判断"key" in d/"key" not in d判断键是否存在(最快 O(1))
遍历for k in d:默认遍历所有

四、字典遍历的 4 种主流写法对比(面试+日常高频)

d={"name":"Alice","age":25,"city":"Beijing"}# 1. 只遍历 key(最常用)forkind:print(k,d[k])# 2. 显式遍历 keyforkind.keys():print(k)# 3. 遍历 valueforvind.values():print(v)# 4. 同时拿到 key 和 value(**最推荐**)fork,vind.items():print(f"{k:>8}:{v}")

五、Python 3.7+ 最重要的两个变化(必须知道)

  1. 插入顺序保证(从 3.7 开始官方保证,3.6 是实现细节)

    • 字典按照插入顺序迭代和显示
    • dict.keys()dict.values()dict.items()也保持插入顺序
  2. 更高效的实现(CPython 整体优化)

六、字典常见使用场景 & 优雅写法(真实项目高频)

# 场景1:计数(分组统计)fromcollectionsimportCounter# 更推荐# 或纯 dict 实现count={}foritemin["apple","banana","apple","cherry","banana","apple"]:count[item]=count.get(item,0)+1# 场景2:分组(按某属性分组)fromcollectionsimportdefaultdict groups=defaultdict(list)forstudentinstudents:groups[student["class"]].append(student["name"])# 场景3:配置 / 参数映射settings={"debug":True,"log_level":"INFO","max_retries":3,"timeout":30.0}# 场景4:快速查找(代替 if-elif 很多层)status_code_meaning={200:"OK",404:"Not Found",500:"Server Error",429:"Too Many Requests"}

七、字典 vs 其他数据结构的对比(面试常考)

需求推荐结构原因 / 优势
需要按插入顺序遍历dict (3.7+)原生支持
需要保持插入顺序且可修改dict
需要按 key 排序遍历sorted(d.items())临时排序
极大量键值对 + 内存敏感slots类 或 dataclass比 dict 省内存
需要默认值自动创建defaultdict避免每次判断 key 是否存在
只做计数统计Counter提供 most_common() 等便捷方法
key 是整数连续小范围list / array速度更快、内存更省

八、速查口诀(背下来日常效率翻倍)

  • 创建:{}最快 →dict()dict.fromkeys()zip
  • 访问:优先.get()>in + []>setdefault
  • 遍历:for k,v in d.items():是第一选择
  • 计数:d[k] = d.get(k,0) + 1defaultdict(int)
  • 更新:d.update()批量最优雅
  • 3.7+:记住“有序”这件事

你目前对字典最困惑的是哪一块?

  • 推导式写不出来?
  • defaultdict 和普通 dict 的使用边界?
  • 排序字典?
  • 嵌套字典取值很麻烦?
  • 还是想看真实项目中字典的 10 种典型用法?

告诉我你的痛点,我可以继续针对性深入~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 23:04:57

Java static 与 final 详解(简单易懂)

Java static 与 final 详解(2025–2026 视角,简单易懂版) static 和 final 是 Java 中最容易混淆的两个修饰符,但它们解决的问题完全不同。 用最生活化的比喻来记住: 修饰符生活比喻核心含义修饰对象能不能改什么时…

作者头像 李华
网站建设 2026/4/16 12:00:15

行车控制算法十年演进

行车控制算法(Longitudinal & Lateral Control) 的十年(2015–2025),是从“公式定义驾驶”向“AI 模拟本能”跨越的十年。 行车控制是自动驾驶的执行终端,负责将规划好的轨迹转化为车辆的转向、油门和…

作者头像 李华
网站建设 2026/4/16 12:00:00

图片如何适应容器框

文章目录 图片如何适应容器框1. fill(默认值)2. contain3. cover4. none5. scale-down 图片如何适应容器框 1. fill(默认值) 规则:拉伸图片,强制让图片的宽高完全填满容器,不保持图片原有宽高…

作者头像 李华
网站建设 2026/4/16 11:58:09

办公必备,pdf转word免费高效方法

theme: default themeName: 默认主题处理pdf文件可能让人头疼,你收到一份文档,需要编辑文字,却发现它被锁定在pdf格式里,把它转成word文件似乎是显而易见的解决办法,但许多在线工具速度慢,限制文件大小,或者把最好的功能藏在昂贵的订阅后面,这让你不得不寻找一种真正免费,高效且…

作者头像 李华
网站建设 2026/4/16 12:01:56

算法工程化十年演进

算法工程化(Algorithm Engineering) 的十年(2015–2025),是从“实验室原型”向“车规级大规模量产”的工业化蜕变过程。 如果说算法本身是“灵魂”,那么工程化就是将灵魂注入机器的“血肉与骨架”。这十年的…

作者头像 李华
网站建设 2026/4/11 5:33:15

MHH-6型人造板划痕试验机

MHH-6型人造板划痕试验机一、 主要用途:MHH-6型人造板划痕试验机主要用于测试材料表面的抗划性能,能够满足GB/T17657-2022《人造板及饰面人造板理化性能试验方法》,是针对各类人造板及饰面人造板进行耐划痕性能试验测试研制的,进行“耐划痕性…

作者头像 李华