Python3 字典详解
1. 概述
字典(Dictionary)是 Python 中另一种可变容器模型,可存储任意类型对象。它是 Python 中最常用的数据结构之一,用于存储键值对(Key-Value Pair)。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号 (,) 分割,整个字典包括在花括号 {} 中。在 Python 3.7 及更高版本中,字典保持插入顺序。
Python 字典是存储键值对的可变容器,键必须唯一且不可变,值可为任意类型。本文详细介绍了字典的多种创建方式(字面量、dict 函数、fromkeys),访问与修改操作(索引、get、update),删除方法(del、pop、clear),以及内置函数和方法(keys、values、items、copy)。此外还涵盖了字典推导式、遍历技巧、键的哈希性约束、性能分析及常见编程陷阱,提供了完整的 Python 字典使用指南。

字典(Dictionary)是 Python 中另一种可变容器模型,可存储任意类型对象。它是 Python 中最常用的数据结构之一,用于存储键值对(Key-Value Pair)。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号 (,) 分割,整个字典包括在花括号 {} 中。在 Python 3.7 及更高版本中,字典保持插入顺序。
d = {key1: value1, key2: value2, key3: value3}
注意: dict 是 Python 的关键字和内置函数,变量名不建议命名为 dict,以免覆盖内置功能。
一个简单的字典实例:
tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}
{}这是最常用的创建方式。
# 创建非空字典
person = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 创建空字典
empty_dict = {}
print(empty_dict) # 输出:{}
print(type(empty_dict)) # 输出:<class 'dict'>
dict()可以通过关键字参数或可迭代对象创建字典。
# 通过关键字参数创建
dict1 = dict(name='Bob', age=30)
print(dict1) # 输出:{'name': 'Bob', 'age': 30}
# 通过可迭代对象(列表/元组)创建
list_pairs = [('x', 1), ('y', 2)]
dict2 = dict(list_pairs)
print(dict2) # 输出:{'x': 1, 'y': 2}
# 创建空字典
emptyDict = dict()
print(len(emptyDict)) # 输出:0
fromkeys() 方法创建一个新字典,以指定序列为键,值为默认值。
keys = ['a', 'b', 'c']
default_value = 0
new_dict = dict.fromkeys(keys, default_value)
print(new_dict) # 输出:{'a': 0, 'b': 0, 'c': 0}
将相应的键放入到方括号中。如果键不存在,直接访问会抛出 KeyError。
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
# 正常访问
print(tinydict['Name']) # 输出:Runoob
# 访问不存在的键会报错
# print(tinydict['Alice']) # KeyError: 'Alice'
为了安全访问,推荐使用 .get() 方法,它允许设置默认返回值。
value = tinydict.get('Alice', 'Not Found')
print(value) # 输出:Not Found
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下:
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
# 更新现有键的值
tinydict['Age'] = 8
# 添加新键值对
tinydict['School'] = "菜鸟教程"
print(tinydict) # 输出:{'Name': 'Runoob', 'Age': 8, 'Class': 'First', 'School': '菜鸟教程'}
update() 合并字典可以将另一个字典的内容合并到当前字典中。
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
d1.update(d2)
print(d1) # 输出:{'a': 1, 'b': 3, 'c': 4} (b 被覆盖)
在 Python 3.9+ 中,也可以使用 | 运算符进行合并:
d3 = d1 | d2
能删单一的元素也能清空字典,清空只需一项操作。
使用 del 命令。
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del tinydict['Name'] # 删除键 'Name'
print(tinydict) # 输出:{'Age': 7, 'Class': 'First'}
pop() 删除并返回值移除给定键并返回该键对应的值。如果键不存在,可选提供默认值。
val = tinydict.pop('Age')
print(val) # 输出:7
popitem() 删除最后一个键值对随机删除(在 3.7+ 中按插入顺序最后)一个键值对并返回元组。
item = tinydict.popitem()
print(item) # 输出:('Class', 'First')
使用 .clear() 方法保留字典对象但移除所有项。
tinydict.clear()
print(tinydict) # 输出:{}
使用 del 语句。
del tinydict
# 此时再访问 tinydict 会引发 NameError
len(dict):返回字典长度。str(dict):转换为字符串表示。type(dict):返回对象类型。.keys():返回字典的所有键视图。.values():返回字典的所有值视图。.items():返回字典的所有键值对视图。.copy():浅拷贝字典。.setdefault(key, default):如果键存在返回值,否则设置键并返回默认值。d = {'a': 1, 'b': 2}
# keys, values, items
print(list(d.keys())) # ['a', 'b']
print(list(d.values())) # [1, 2]
print(list(d.items())) # [('a', 1), ('b', 2)]
# setdefault
result = d.setdefault('c', 3)
print(result) # 3
print(d) # {'a': 1, 'b': 2, 'c': 3}
# copy
d_copy = d.copy()
字典推导式提供了一种简洁的方式来创建字典。
# 基本推导式
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) # {0: 0, 2: 4, 4: 8, 6: 12, 8: 16}
for key in d:
print(key)
for key, value in d.items():
print(f"{key}: {value}")
不要在遍历字典时修改其大小,这可能导致 RuntimeError。
字典值可以是任何的 Python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'}
print(tinydict['Name']) # 输出:小菜鸟
# 错误示例
try:
bad_dict = {['Name']: 'Runoob'}
except TypeError as e:
print(e) # unhashable type: 'list'
# 正确示例:使用元组作为键
valid_dict = {('Name', 'First'): 'Runoob'}
字典比列表占用更多内存,因为需要维护哈希表结构。对于简单计数场景,可以使用 collections.Counter。
# 错误
def add_item(item, list_arg=[]):
list_arg.append(item)
return list_arg
# 正确
def add_item(item, list_arg=None):
if list_arg is None:
list_arg = []
list_arg.append(item)
return list_arg
Python 字典是处理键值映射关系的核心工具。掌握其创建、访问、修改、删除以及常用方法,能够显著提高代码效率和可读性。在实际开发中,应充分利用字典的 O(1) 查找特性,并注意键的不可变性要求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online