一、前言
在 Python 中,字典(Dictionary) 是一种非常重要的内置数据类型,它以**键值对(Key-Value Pair)**的形式存储数据,是实现高效查找、插入和删除操作的理想选择。
本文将带你从零开始了解 Python 字典的基本概念、特点、创建方式以及常用操作,帮助你快速掌握这一核心数据结构。
二、什么是字典?
1. 定义
字典(dict) 是一种无序、可变的数据结构,用于存储多个“键-值”对(key-value pair),每个键对应一个值。
与列表不同的是:
| 列表 | 字典 |
|---|---|
| 通过索引访问元素 | 通过键(key)访问值 |
| 有序 | 无序(Python 3.7+ 保持插入顺序) |
| 元素为单一值 | 元素为键值对 |
例如:
student = {
'name': 'Alice',
'age': 20,
'major': 'Computer Science'
}
2. 特点总结
| 特性 | 描述 |
|---|---|
| 可变性 | 支持增删改查操作 |
| 无序性 | 不保证顺序(但 Python 3.7+ 默认按插入顺序保存) |
| 键唯一 | 每个键必须唯一,重复键会被覆盖 |
| 值多样 | 值可以是任意类型,如数字、字符串、列表、对象等 |
| 键不可变 | 键必须是不可变类型(如整数、字符串、元组) |
三、如何创建字典?
1. 使用花括号 {} 创建字典(最常见)
person = {'name': 'Tom', 'age': 25, 'city': 'Beijing'}
print(person)
# 输出:{'name': 'Tom', 'age': 25, 'city': 'Beijing'}
2. 使用 dict() 构造函数创建
可以通过多种方式构造字典:
(1)键值对作为参数传入
person = dict(name='Jerry', age=30, city='Shanghai')
print(person) # {'name': 'Jerry', 'age': 30, 'city': 'Shanghai'}
(2)使用列表或元组构造
data = [('name', 'Lucy'), ('age', 22)]
d = dict(data)
print(d) # {'name': 'Lucy', 'age': 22}
(3)从两个列表 zip 合并生成
keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
print(my_dict) # {'a': 1, 'b': 2, 'c': 3}
3. 创建空字典
empty_dict = {}
another_empty = dict()
四、字典中的键和值要求
✅ 合法的键类型(必须是不可变类型):
- 整数(int)
- 浮点数(float)
- 字符串(str)
- 布尔值(True/False)
- 元组(tuple)
❌ 非法的键类型(不可哈希,不能作为键):
- 列表(list)
- 字典(dict)
- 集合(set)
例如:
# 合法
d = {(1, 2): 'point'}
# 非法,会报错:TypeError: unhashable type: 'list'
# d = {[1, 2]: 'point'}
五、字典的嵌套结构
字典可以嵌套其他字典、列表、元组等复杂结构,非常适合表示层级关系。
示例:学生信息字典嵌套
students = {
'001': {
'name': 'Alice',
'scores': {'math': 90, 'english': 85}
},
'002': {
'name': 'Bob',
'scores': {'math': 78, 'english': 92}
}
}
# 访问 Bob 的英语成绩
print(students['002']['scores']['english']) # 92
六、为什么使用字典?
| 场景 | 适用原因 |
|---|---|
| 存储配置项 | 如数据库连接信息、用户设置等 |
| 表达对象属性 | 如用户信息、商品详情等 |
| 快速查找 | 字典的查找时间复杂度接近 O(1) |
| JSON 数据处理 | Python 字典与 JSON 格式高度兼容 |
| 函数参数传递 | 可用字典解包传递关键字参数 |
七、小结:字典 vs 列表
| 对比项 | 列表 | 字典 |
|---|---|---|
| 是否有序 | ✅ 是(默认) | ⚠️ 无序(3.7+ 保持顺序) |
| 存取方式 | 索引 | 键 |
| 是否允许重复 | ✅ 是 | ❌ 否 |
| 是否可变 | ✅ 是 | ✅ 是 |
| 查找效率 | O(n) | O(1) |
| 适用场景 | 有序集合 | 映射关系 |
八、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!