Python 字典详解
1. 什么是字典
字典(Dictionary)是 Python 中另一种可变容器模型,可存储任意类型对象。它是键值对(Key-Value Pair)的集合,通过键来快速访问对应的值。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。基本格式如下:
Python 字典是存储键值对的可变容器,键需唯一且不可变,值可以是任意类型。本文详细讲解了字典的定义方式、元素的访问与修改、删除操作,以及常用的内置函数和方法如 get、pop、update 等。此外还涵盖了字典的遍历技巧、推导式语法及哈希性要求,帮助开发者全面掌握 Python 字典的使用规范与最佳实践。

字典(Dictionary)是 Python 中另一种可变容器模型,可存储任意类型对象。它是键值对(Key-Value Pair)的集合,通过键来快速访问对应的值。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。基本格式如下:
d = {key1: value1, key2: value2}
特性说明:
# 创建字典
dict_example = {'name': 'User', 'age': 25, 'city': 'Beijing'}
print(dict_example)
# 重复键的情况
dup_dict = {'a': 1, 'b': 2, 'a': 3}
print(dup_dict) # 输出:{'a': 3, 'b': 2},后一个值覆盖了前一个
除了使用花括号直接创建,还可以使用内置函数创建字典。
data = {'id': 1001, 'status': 'active'}
# 从键值对序列创建
pairs = [('x', 1), ('y', 2)]
d = dict(pairs)
print(d) # 输出:{'x': 1, 'y': 2}
# 从关键字参数创建
d2 = dict(name='Alice', age=30)
print(d2)
# 使用 fromkeys 创建默认值相同的字典
keys = ['a', 'b', 'c']
default_val = 0
new_dict = dict.fromkeys(keys, default_val)
print(new_dict) # 输出:{'a': 0, 'b': 0, 'c': 0}
将相应的键放入方括号 [] 中可以获取值。如果键不存在,直接访问会抛出 KeyError 异常。
info = {'Name': 'Test', 'Color': 'Blue', 'Class': 'First'}
try:
print(info['Name']) # 输出:Test
print(info['Age']) # 抛出 KeyError
except KeyError as e:
print(f"键错误:{e}")
get() 方法允许指定默认值,避免程序崩溃。
val = info.get('Age') # 返回 None
val_default = info.get('Age', 18) # 返回 18
print(val_default)
向字典添加新内容的方法是增加新的键/值对,修改已有键/值则直接赋值即可。
d = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
# 更新现有键的值
d['Age'] = 8
# 添加新键
d['School'] = 'University'
print(d) # 输出:{'Name': 'Zara', 'Age': 8, 'Class': 'First', 'School': 'University'}
d.update({'Age': 9, 'Grade': 'A'})
print(d)
可以删除单一的元素,也可以清空字典,甚至删除整个字典对象。
d = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
# 删除特定键
del d['Name']
# 清空字典所有条目
d.clear()
# 删除字典对象本身
del d
注意:在 del d 之后,变量 d 不再存在,再次访问会引发 NameError。
d = {'a': 1, 'b': 2}
# pop 删除并返回指定键的值
val = d.pop('a')
print(val) # 输出:1
# popitem 随机删除并返回最后一对键值对(Python 3.7+ 按插入顺序)
item = d.popitem()
print(item) # 输出:('b', 2)
| 函数 | 描述 |
|---|---|
len(dict) | 计算字典元素个数,即键的总数。 |
str(dict) | 输出字典可打印的字符串表示。 |
type(variable) | 返回输入的变量类型,如果是字典则返回 dict 类型。 |
| 方法 | 描述 |
|---|---|
dict.clear() | 删除字典内所有元素。 |
dict.copy() | 返回一个字典的浅复制。 |
dict.get(key, default) | 返回指定键的值,如果不存在返回 default。 |
dict.items() | 返回可遍历的 (键,值) 元组数组视图。 |
dict.keys() | 返回一个字典所有的键的视图对象。 |
dict.values() | 返回字典中的所有值的视图对象。 |
dict.setdefault(key, default) | 类似 get,但如果键不存在,添加键并将值设为 default。 |
dict.update(dict2) | 把字典 dict2 的键/值对更新到当前字典里。 |
dict.pop(key[, default]) | 删除给定键所对应的值,返回被删除的值。 |
dict.popitem() | 返回并删除字典中的最后一对键和值。 |
遍历字典通常有三种方式:遍历键、遍历值、遍历键值对。
d = {'x': 10, 'y': 20, 'z': 30}
# 遍历键
for k in d:
print(k)
# 遍历值
for v in d.values():
print(v)
# 遍历键值对
for k, v in d.items():
print(f"{k}: {v}")
类似于列表推导式,字典推导式可以快速生成字典。
# 基础推导式
squares = {x: x**2 for x in range(5)}
print(squares) # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 条件过滤
evens = {x: x*2 for x in range(10) if x % 2 == 0}
print(evens)
字典基于哈希表实现,因此查找、插入和删除的平均时间复杂度为 O(1)。
关键要求:
# 错误示例
try:
bad_dict = {[1, 2]: 'value'}
except TypeError as e:
print(f"错误:{e}") # unhashable type: 'list'
# 正确示例
good_dict = {(1, 2): 'value'}
print(good_dict)
注意事项:
__hash__ 和 __eq__ 方法。get() 比直接访问更安全。.copy() 或收集要删除的键后再处理。setdefault 非常有用。copy() 只是浅拷贝,嵌套的可变对象仍共享引用。掌握字典的使用是 Python 编程的基础,理解其底层机制有助于编写更高效、健壮的代码。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online