惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
C
Cybersecurity and Infrastructure Security Agency CISA
A
Arctic Wolf
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
Forbes - Security
Forbes - Security
S
Securelist
爱范儿
爱范儿
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
P
Privacy International News Feed
WordPress大学
WordPress大学
U
Unit 42
腾讯CDC
The Cloudflare Blog
T
Threatpost
L
LINUX DO - 热门话题
N
Netflix TechBlog - Medium
G
Google Developers Blog
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
S
Schneier on Security
I
InfoQ
T
The Exploit Database - CXSecurity.com
S
Secure Thoughts
Webroot Blog
Webroot Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tor Project blog
F
Full Disclosure
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
LINUX DO - 最新话题
Martin Fowler
Martin Fowler
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
P
Palo Alto Networks Blog
Attack and Defense Labs
Attack and Defense Labs

博客园 - 箫笛

Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - lambda 函数 Python 编程 - 文件操作 Python 编程 - 输入与输出 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字符串(str) Python 编程 - 列表(list) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Python 编程 - 字典(dict)
箫笛 · 2026-06-20 · via 博客园 - 箫笛

Python 3 中的 dict(字典)是一种无序(严格说是 Python 3.7+ 插入有序)、可变键值对(Key-Value)的映射容器类型。它是 Python 最核心、最强大的数据结构之一,底层基于哈希表实现,平均时间复杂度为 O(1)。

以下是 Python 3 中 dict 的全面解析,重点标注了 Python 3 独有的新特性:

1. 核心特性(Python 3.7+ 正式确定)

  • 保持插入顺序:在 Python 3.7 及以后,dict 正式保证会记住键值对的插入顺序(在此之前 3.6 仅为 CPython 实现细节)。遍历字典时,顺序与插入时一致。
  • 键必须可哈希(Hashable):键必须是不可变类型(如 intstrtuple),因为需要计算哈希值。listsetdict 本身不能作为键。
  • 值可以是任意类型:值可以是任何 Python 对象,包括可变对象。

2. 创建字典

# 方式一:花括号
d1 = {'name': 'Alice', 'age': 30}

# 方式二:dict() 构造函数(键名不加引号)
d2 = dict(name='Bob', age=25)

# 方式三:键值对列表(适用于动态构建)
d3 = dict([('a', 1), ('b', 2)])

# 方式四:字典推导式(Python 3 特色)
squares = {x: x**2 for x in range(5)}  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 方式五:fromkeys 创建默认值字典
d4 = dict.fromkeys(['x', 'y'], 0)  # {'x': 0, 'y': 0}

3. 常用增删改查操作

操作 代码示例 说明
增加/修改 d['key'] = 'value' 键存在则覆盖,不存在则新增
安全取值 d.get('key', '默认值') 键不存在返回 None 或指定默认值,不抛异常
强制取值 d['missing'] 键不存在会抛出 KeyError
设置默认 d.setdefault('x', []) 若键存在返回值,若不存在则插入该键并返回默认值
删除 del d['key'] 删除键值对(不存在抛 KeyError)
安全弹出 value = d.pop('key', None) 删除并返回值,若不存在返回默认值不抛异常
弹出末尾项 d.popitem() 删除并返回最后插入的键值对(LIFO 后进先出)
合并更新 d.update({'a': 1}) 合并另一个字典或可迭代对象到当前字典

4. Python 3.9+ 新特性:合并与更新运算符

Python 3.9 引入了更优雅的字典合并语法:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# 合并(生成新字典):b 的值被 dict2 覆盖
merged = dict1 | dict2  # {'a': 1, 'b': 3, 'c': 4}

# 原地更新(修改 dict1)
dict1 |= dict2  # dict1 现在变为 {'a': 1, 'b': 3, 'c': 4}

5. 遍历方式(性能高效)

d = {'name': 'Tom', 'age': 18}

# 遍历键(默认)
for key in d:
    print(key)

# 遍历值
for value in d.values():
    print(value)

# 遍历键值对(推荐,解包)
for key, value in d.items():
    print(key, value)

6. Python 3 独有的视图(View)对象

d.keys()d.values()d.items() 返回的是视图,而非复制列表。视图会动态反映字典的修改,且支持集合运算(针对 keys 和 items):

keys = d.keys()
d['new'] = 100
print(keys)  # 视图自动包含了 'new'

# 集合操作(取交集)
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
print(d1.keys() & d2.keys())  # {'b'}

7. 内存优化(对比 Python 2)

Python 3.6+ 重新设计了字典底层结构(称为 Compact Dict),使得字典在内存占用上比 Python 2 减少了约 20% 到 25%,且迭代速度更快。

8. 高性能与注意事项

  • 时间复杂度:查找、插入、删除平均为 O(1),但最坏情况(哈希冲突严重)为 O(n)。
  • 排序:虽然保持插入顺序,但若需按键或值排序,可用 sorted(d.items()) 构建新字典。
  • 比较:Python 3 中,字典之间不能使用 < > 比较大小,但支持 ==!=(无视顺序,仅比较内容)。

9. 搭配 collections 模块更强大

虽然属于标准库,但在实际开发中常与 dict 配合:

  • defaultdict:当键不存在时,自动调用工厂函数生成默认值(避免 setdefault)。
    from collections import defaultdict
    dd = defaultdict(list)
    dd['a'].append(1)  # 无需判断键是否存在
    
  • OrderedDict:虽然普通 dict 已有序,但 OrderedDict 额外提供了 move_to_end 等重排序方法,在 Python 3 中仍有其特定用途。

总结一句话:Python 3 的 dict 是集有序性高性能哈希查找内存紧凑于一身的全能键值对容器,配合 3.9 的 | 运算符和 3.7+ 的有序特性,彻底让它成为了开发者首选的无脑映射工具。