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 文件', '生成总结报告']}
- Author:盛溪
- URL:https://tangly1024.com/article/%E6%99%AE%E9%80%9A%E5%AD%97%E5%85%B8%E5%92%8Cdefaultdict%E7%9A%84%E5%8C%BA%E5%88%AB
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!

.jpg?table=block&id=26f7c1d5-a1e9-80d7-a52b-e71bb7079501&t=26f7c1d5-a1e9-80d7-a52b-e71bb7079501)


