Lazy loaded image
技术分享与前沿技术域认知
✍️普通字典和defaultdict的区别
Words 205Read Time 1 min
2026-2-25
2026-2-25
slug
普通字典defaultdict的区别
type
Post
status
Published
date
Feb 25, 2026
tags
推荐
文字
思考
summary
category
技术分享与前沿技术域认知
icon
password

浓缩精华

哈希表是连汤带水的,不光有key值,还有value值,但你一开始不能直接单给一个key值,而是要value也赋值,为空也是可以的,但是不能啥都没有。
之后,这个链表才能往里不断添加value值进去,就才能使用.append方法
💡
1. 核心逻辑:键(Key)和值(Value)是“命运共同体” 在 Python 的字典里,你不能只占坑位不放东西。 • 你的理解:“相当于给了一个下标,但里面没数值。” —— 对的!深层逻辑:在普通的 dict 中,如果你只写 mp["AI实战"] 而不给它赋值,这个“下标”在字典里其实根本不存在。 这就好比你去酒店前台: • 普通字典:你直接问:“201房间里有谁?” 前台查了一下,发现压根没开过 201 房,于是直接报警(报错 KeyError)。 • mp[key] = []:你跟前台说:“给我开个 201 房,先空着。” 于是,201 这个房号正式生效了,里面放了一个空的床位([])。 • append():你带了个客人(数据)住进了 201 房。 2. 为什么一定要初始化为“空列表” [] 这涉及到一个非常关键的编程概念:对象方法(Method)的调用前提。 当你执行 mp[folder_name].append("file.pdf") 时,其实发生了两件事: 1. 取值:先去 mp 里把 folder_name 对应的内容拿出来。 2. 操作:对拿出来的这个“东西”执行 .append() 操作。 重点来了: • 如果你不先执行 mp[folder_name] = [],第一步取出来的就是“虚无(不存在)”,虚无是没有 .append() 这个功能的,所以程序会崩溃。 • 通过初始化为 [],你确保了第一步取出来的是一个真正的列表对象,它拥有 .append() 方法。 3. 技术进阶:如果是 defaultdict 呢? 你之前提到的 defaultdict(list),它在后台做的事情其实就是自动帮你补全了那一行代码它的内部逻辑逻辑如下: “当你尝试去取一个不存在的 Key 时,我(系统)先偷偷执行一遍 mp[key] = [],然后再把这个新造出来的 [] 交给你去 append。” 4. 总结对比表
动作
代码
结果
只声明不赋值
mp["key"]
报错! 字典里找不到这个键。
初始化为空
mp["key"] = []
成功! 字典里多了一个键,值为一个空列表。
执行存储
mp["key"].append(x)
成功! 列表里多了一个元素。

示例代码

如果打印的话,结果是{'Agent_A': ['分析 PDF 文件', '生成总结报告']}
 
 
 
 
 
 
 
上一篇
leetcode 两数之和
下一篇
当 AI 遇到"经验积累":CL-bench 揭示的根本瓶颈