0%

字典

Python 字典(Dictionary)详解

在 Python 中,字典(Dictionary)是一种键值对(key-value) 结构的可变容器,类似于 Java 中的 Map 或 JavaScript 中的对象。它通过键(key)快速查找对应的值(value),是处理关联数据的核心数据结构。本文将详细介绍字典的创建、操作及常用方法。

字典的基本定义

字典使用大括号 {} 定义,键值对之间用逗号分隔,键与值用冒号 : 连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 基本字典(键为字符串,值为整数)
student = {'name': 'Alice', 'age': 20, 'major': 'Computer Science'}

# 键可以是任意不可变类型(如整数、字符串、元组)
mixed_dict = {
1: 'one', # 整数作为键
('a', 'b'): 123, # 元组作为键(元组不可变)
'list': [1, 2, 3] # 值可以是任意类型(包括列表、字典等)
}

# 空字典
empty_dict = {}
# 用 dict() 函数创建字典
another_dict = dict(name='Bob', age=21) # 等价于 {'name': 'Bob', 'age': 21}

注意

  • 键必须是不可变类型(如字符串、整数、元组),列表等可变类型不能作为键。
  • 键是唯一的,若重复定义,后面的键值对会覆盖前面的。

字典的核心操作

访问值(通过键)

通过 字典名[键] 访问对应的值,若键不存在则报错。

1
2
3
4
5
6
7
student = {'name': 'Alice', 'age': 20}

print(student['name']) # 输出:Alice(访问 name 对应的值)
print(student['age']) # 输出:20(访问 age 对应的值)

# 使用 get() 方法访问(键不存在时返回默认值,避免报错)
print(student.get('major', 'Unknown')) # 输出:Unknown(键 'major' 不存在,返回默认值)

添加 / 修改键值对

  • 若键不存在,赋值操作会添加新的键值对。
  • 若键已存在,赋值操作会修改对应的值。
1
2
3
4
5
6
7
8
9
student = {'name': 'Alice', 'age': 20}

# 添加新键值对
student['major'] = 'Math'
print(student) # 输出:{'name': 'Alice', 'age': 20, 'major': 'Math'}

# 修改已有键的值
student['age'] = 21
print(student) # 输出:{'name': 'Alice', 'age': 21, 'major': 'Math'}

删除键值对

  • del 字典名[键]:删除指定键值对。
  • 字典名.pop(键):删除并返回指定键的值。
  • 字典名.clear():清空字典所有键值对。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
student = {'name': 'Alice', 'age': 21, 'major': 'Math'}

# 删除指定键
del student['major']
print(student) # 输出:{'name': 'Alice', 'age': 21}

# 删除并返回值
age = student.pop('age')
print(age) # 输出:21
print(student) # 输出:{'name': 'Alice'}

# 清空字典
student.clear()
print(student) # 输出:{}

字典的遍历

字典提供多种方式遍历键、值或键值对:

遍历所有键(keys()

1
2
3
4
5
6
7
8
9
fruit_prices = {'apple': 5, 'banana': 3, 'orange': 4}

# 直接遍历字典(默认遍历键)
for fruit in fruit_prices:
print(fruit) # 输出:apple、banana、orange

# 使用 keys() 方法(更清晰)
for fruit in fruit_prices.keys():
print(fruit) # 输出同上

遍历所有值(values()

1
2
3
4
fruit_prices = {'apple': 5, 'banana': 3, 'orange': 4}

for price in fruit_prices.values():
print(price) # 输出:5、3、4

遍历键值对(items()

1
2
3
4
5
6
7
8
9
10
fruit_prices = {'apple': 5, 'banana': 3, 'orange': 4}

# items() 返回包含 (键, 值) 元组的可迭代对象
for fruit, price in fruit_prices.items():
print(f"水果:{fruit},价格:{price}元")

# 输出:
# 水果:apple,价格:5元
# 水果:banana,价格:3元
# 水果:orange,价格:4元

字典的常用方法

除上述操作外,字典还有以下常用方法:

方法 功能描述 示例
keys() 返回所有键的视图(类似列表) dict.keys()
values() 返回所有值的视图 dict.values()
items() 返回所有键值对的视图(元组形式) dict.items()
get(key, default) 获取键对应的值,不存在则返回 default student.get('gender', 'Unknown')
pop(key) 删除并返回键对应的值 student.pop('age')
popitem() 删除并返回最后插入的键值对(3.7+ 有序) dict.popitem()
update(other) 用另一个字典的键值对更新当前字典 dict.update({'a': 1, 'b': 2})
copy() 复制字典(浅拷贝) dict.copy()

示例:update()copy()

1
2
3
4
5
6
7
8
9
10
11
# update():合并字典(覆盖重复键)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1) # 输出:{'a': 1, 'b': 3, 'c': 4}(b 的值被覆盖)

# copy():复制字典
dict3 = dict1.copy()
dict3['a'] = 100
print(dict1) # 输出:{'a': 1, 'b': 3, 'c': 4}(原字典不变)
print(dict3) # 输出:{'a': 100, 'b': 3, 'c': 4}(副本被修改)

字典的特性与适用场景

特性

  • 无序到有序:Python 3.7+ 中,字典保留插入顺序;3.6 及以下无序。
  • 可变:可动态添加、修改、删除键值对。
  • 高效查找:通过键查找值的时间复杂度为 O (1),远快于列表的 O (n)。

适用场景

  • 存储关联数据:如用户信息(姓名、年龄、邮箱)、配置参数(键为参数名,值为参数值)。
  • 快速查找:需要通过唯一标识(键)快速定位数据时(如缓存、索引)。
  • 数据聚合:将多个相关值组合成一个结构(如统计单词出现次数:{'apple': 5, 'banana': 3})。

欢迎关注我的其它发布渠道