Python 字典
字典(Dictionary)是 Python 中最灵活的数据类型之一,它是一个无序的、可变的、键值对(key-value)的集合。
1. 字典的基本概念
- 字典使用花括号
{}创建 - 每个键值对用冒号
:分隔 - 键必须是唯一的,且必须是不可变类型(如字符串、数字或元组)
- 值可以是任何数据类型
2. 创建字典
# 创建空字典
empty_dict = {}
# 创建包含键值对的字典
person = {
"name": "张三",
"age": 25,
"city": "北京"
}
# 使用 dict() 构造函数创建字典
person2 = dict(name="李四", age=30, city="上海")
3. 访问字典元素
# 使用键访问值
name = person["name"] # 返回 "张三"
# 使用 get() 方法(更安全的方式)
age = person.get("age") # 返回 25
salary = person.get("salary", 0) # 如果键不存在,返回默认值 0
4. 修改字典
# 添加新的键值对
person["job"] = "工程师"
# 修改现有值
person["age"] = 26
# 删除键值对
del person["city"]
# 或使用 pop() 方法
age = person.pop("age")
5. 字典的常用方法
# 获取所有键
keys = person.keys()
# 获取所有值
values = person.values()
# 获取所有键值对
items = person.items()
# 清空字典
person.clear()
# 复制字典
person_copy = person.copy()
6. 字典的遍历
# 遍历键
for key in person:
print(key)
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
7. 字典推导式
# 创建数字平方的字典
squares = {x: x**2 for x in range(5)}
# 结果: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
8. 实际应用示例
# 学生成绩管理
students = {
"张三": {"语文": 85, "数学": 92, "英语": 88},
"李四": {"语文": 78, "数学": 95, "英语": 82},
"王五": {"语文": 92, "数学": 88, "英语": 90}
}
# 计算平均分
def calculate_average(student_name):
scores = students[student_name]
return sum(scores.values()) / len(scores)
# 查找最高分科目
def find_highest_score(student_name):
scores = students[student_name]
return max(scores.items(), key=lambda x: x[1])
9. 注意事项
- 字典是无序的(在 Python 3.7+ 中保持插入顺序)
- 键必须是不可变类型
- 值可以是任何类型,包括其他字典(嵌套字典)
- 使用
get()方法比直接使用[]更安全 - 字典的查找效率很高,时间复杂度为 O(1)
10. 性能考虑
- 字典的查找、插入和删除操作都是 O(1) 时间复杂度
- 适合需要频繁查找、插入和删除的场景
- 相比列表,字典占用更多内存,因为需要存储键值对
- 在需要保持数据顺序时,可以考虑使用
collections.OrderedDict
