精通 Python 字典:创建、操作与进阶技巧
Python 字典
本综合指南解释 Python 字典——如何创建、访问、增删元素,并利用内置方法。
视频:Python 字典存储键值对
Python 字典是键值对的无序集合。每个条目将唯一、不可变的键与任意类型的值关联。
创建 Python 字典
定义字典很简单:将逗号分隔的键值对放入花括号 {}。键必须不可变(字符串、数字或不可变元素的元组)且唯一;值可以是任意类型且可重复。
# 空字典
my_dict = {}
# 整数键字典
my_dict = {1: 'apple', 2: 'ball'}
# 混合键字典
my_dict = {'name': 'John', 1: [2, 4, 3]}
# 使用 dict()
my_dict = dict({1:'apple', 2:'ball'})
# 从键值对序列
my_dict = dict([(1,'apple'), (2,'ball')])
以上方法创建相同字典结构。
访问字典元素
字典值通过键检索,用方括号 [] 或 get() 方法。方括号在键缺失时引发 KeyError;get() 默认返回 None。
# get 与 [] 获取元素对比
my_dict = {'name': 'Jack', 'age': 26}
# 输出: Jack
print(my_dict['name'])
# 输出: 26
print(my_dict.get('age'))
# 访问缺失键返回 None
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])
输出
Jack 26 None Traceback (most recent call last): File "<string>", line 15, in <module> print(my_dict['address']) KeyError: 'address'
修改与添加字典元素
字典可变。给现有键赋值更新其值;给新键赋值添加新条目。
# 修改与添加字典元素
my_dict = {'name': 'Jack', 'age': 26}
# 更新值
my_dict['age'] = 27
# 输出: {'age': 27, 'name': 'Jack'}
print(my_dict)
# 添加项
my_dict['address'] = 'Downtown'
# 输出: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
print(my_dict)
输出
{'name': 'Jack', 'age': 27} {'name': 'Jack', 'age': 27, 'address': 'Downtown'}
从字典移除元素
用 pop() 删除指定键并返回其值。popitem() 移除任意键值对,clear() 清空字典。del 关键字可删除单个条目或整个变量。
# 从字典移除元素
# 创建字典
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 移除特定项,返回其值
# 输出: 16
print(squares.pop(4))
# 输出: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
# 移除任意项,返回 (key,value)
# 输出: (5, 25)
print(squares.popitem())
# 输出: {1: 1, 2: 4, 3: 9}
print(squares)
# 移除所有项
squares.clear()
# 输出: {}
print(squares)
# 删除字典本身
del squares
# 报错
print(squares)
输出
16 {1: 1, 2: 4, 3: 9, 5: 25} (5, 25) {1: 1, 2: 4, 3: 9} {} Traceback (most recent call last): File "<string>", line 30, in <module> print(squares) NameError: name 'squares' is not defined
Python 字典方法
下表列出常用字典方法及其用途。许多在后续示例中演示。
| 方法 | 描述 |
|---|---|
| clear() | 移除字典所有项 |
| copy() | 返回字典浅拷贝 |
| fromkeys(seq[, v]) | 从 seq 创建新字典,每个键设为 v(默认 None) |
| get(key[,d]) | 返回 key 的值;缺失返回 d(默认 None) |
| items() | 返回字典 (键, 值) 对视图 |
| keys() | 返回字典键视图 |
| pop(key[,d]) | 删除 key 并返回其值或 d;键缺失且未提供 d 时引发 KeyError |
| popitem() | 移除并返回任意 (键, 值) 对;空字典引发 KeyError |
| setdefault(key[,d]) | 返回 key 的值;缺失则插入 key 值 d(默认 None)并返回 d |
| update([other]) | 从 other 插入或更新键值对,覆盖现有键 |
| values() | 返回字典值视图 |
示例用法:
# 字典方法
marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
# 输出: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)
for item in marks.items():
print(item)
# 输出: ['English', 'Math', 'Science']
print(list(sorted(marks.keys())))
输出
{'Math': 0, 'English': 0, 'Science': 0} ('Math', 0) ('English', 0) ('Science', 0) ['English', 'Math', 'Science']
Python 字典推导式
字典推导式提供从可迭代对象构建字典的简洁语法。模式为 {key: value for element in iterable}。
# 字典推导式
squares = {x: x*x for x in range(6)}
print(squares)
输出
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
等价命令式版本:
squares = {}
for x in range(6):
squares[x] = x*x
print(squares)
输出
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
推导式可包含多个循环和 if 过滤。示例:仅奇数平方。
# 带 if 条件的字典推导式
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
print(odd_squares)
输出
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
更多字典推导式见 Python 文档。
其他字典操作
字典成员测试
用 in 操作符检查键是否存在;不检查值。
# 字典键成员测试
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# 输出: True
print(1 in squares)
# 输出: True
print(2 not in squares)
# 成员测试仅针对键非值
# 输出: False
print(49 in squares)
输出
True True False
遍历字典
直接遍历键,再访问值。
# 遍历字典
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
print(squares[i])
输出
1 9 25 49 81
字典内置函数
all()、any()、len()、sorted() 等标准函数常用于字典。
| 函数 | 描述 |
|---|---|
| all() | 所有键为真(或字典为空)返回 True |
| any() | 任一键为真返回 True;空字典返回 False |
| len() | 键值对数量 |
| cmp() | 比较两字典(Python 3 已移除) |
| sorted() | 返回键的排序列表 |
示例:
# 字典内置函数
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# 输出: False
print(all(squares))
# 输出: True
print(any(squares))
# 输出: 6
print(len(squares))
# 输出: [0, 1, 3, 5, 7, 9]
print(sorted(squares))
输出
False True 6 [0, 1, 3, 5, 7, 9]
Python
- 精通Python数据类型:实战指南
- 精通Python运算符:全面指南
- 精通Python Pass语句:实战指南
- 精通Python函数参数:位置、关键字与默认参数
- 精通 Python 迭代器:工作原理与自定义构建
- Python 闭包详解:嵌套函数如何捕获变量
- 精通 Python datetime:日期、时间与时区实战指南
- Python 语言概览:高级、可读、交互式与面向对象
- Python 数字类型详解:不可变数值数据的操作与数学函数
- Python 字符串完全指南:创建、访问、格式化与内置方法大全
- Python 元组详解:定义、使用与列表的核心区别
- Python 字典基础:键值对操作、访问与核心方法大全