字典简介
什么是字典?
字典是Python中的一种映射类型,具有以下特点:
- 使用键值对(key-value)存储数据
- 键必须是唯一的且不可变
- 值可以是任意类型的数据
- 支持动态添加和删除键值对
- 查找效率高(基于哈希表实现)
字典的基本形式
# 空字典
empty_dict = {}
# 简单的字典
person = {'name': '张三', 'age': 18}
# 包含不同类型值的字典
mixed = {
'number': 42,
'text': 'Hello',
'list': [1, 2, 3],
'nested': {'a': 1, 'b': 2}
}
创建字典
创建字典的多种方式
Python提供了多种创建字典的方法,可以根据需要选择最适合的方式。
创建方法示例
# 1. 使用花括号
student = {
'name': '张三',
'age': 18,
'score': 95
}
# 2. 使用dict()构造函数
person = dict(name='李四', age=20, city='北京')
# 3. 使用zip()创建字典
keys = ['a', 'b', 'c']
values = [1, 2, 3]
letter_dict = dict(zip(keys, values))
# 4. 使用字典推导式
squares = {x: x**2 for x in range(5)}
# 5. 创建默认值字典
from collections import defaultdict
grades = defaultdict(list) # 值默认为空列表
注意事项
- 键必须是不可变类型(字符串、数字、元组等)
- 同一个键不能重复,后面的值会覆盖前面的值
- 创建大型字典时要注意内存使用
访问和修改
字典元素的访问和修改
字典提供了多种方式来访问和修改其中的数据。
基本操作示例
student = {'name': '张三', 'age': 18, 'score': 95}
# 访问元素
print(student['name']) # 使用键直接访问
print(student.get('age')) # 使用get()方法访问
print(student.get('phone', '未设置')) # 指定默认值
# 修改元素
student['age'] = 19 # 修改已存在的值
student['class'] = '三班' # 添加新的键值对
# 删除元素
del student['score'] # 使用del语句删除
age = student.pop('age') # 删除并返回值
last = student.popitem() # 删除并返回最后一项
# 检查键是否存在
if 'name' in student:
print("找到了名字")
最佳实践
- 优先使用get()方法访问,可以避免KeyError异常
- 在删除键之前先检查是否存在
- 使用popitem()可以安全地删除和获取元素
常用方法
字典的内置方法
Python的字典类型提供了许多有用的内置方法,可以方便地进行各种操作。
方法使用示例
student = {'name': '张三', 'age': 18, 'score': 95}
# 获取所有键、值和键值对
keys = student.keys()
values = student.values()
items = student.items()
# 遍历字典
for key in student:
print(f"{key}: {student[key]}")
for key, value in student.items():
print(f"{key}: {value}")
# 更新字典
new_info = {'phone': '123456', 'email': '[email protected]'}
student.update(new_info)
# 清空字典
student.clear()
# 复制字典
shallow_copy = student.copy()
import copy
deep_copy = copy.deepcopy(student)
高级操作
高级字典操作
掌握这些高级操作可以让你更高效地处理字典数据。
高级操作示例
# 字典推导式
prices = {'apple': 5, 'banana': 3, 'orange': 4}
discount_prices = {item: price*0.8 for item, price in prices.items()}
# 合并字典(Python 3.5+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged = {**dict1, **dict2}
# 使用defaultdict
from collections import defaultdict
word_count = defaultdict(int)
for word in ['apple', 'banana', 'apple', 'orange']:
word_count[word] += 1
# 使用OrderedDict(保持插入顺序)
from collections import OrderedDict
ordered = OrderedDict()
ordered['a'] = 1
ordered['b'] = 2
ordered['c'] = 3
练习题
巩固练习
通过以下练习题来检验你对字典操作的掌握程度。
基础练习
- 创建一个学生信息字典,包含姓名、年龄、成绩等信息。
- 实现一个函数,统计字符串中每个字符出现的次数。
- 将两个字典合并,如果有重复的键,保留第二个字典的值。
进阶练习
- 实现一个简单的通讯录系统,支持增删改查操作。
- 使用字典实现一个商品库存管理系统。
- 创建一个嵌套字典来表示公司的组织结构。
学习路径:
列表 → 元组 → 字典 → 集合