字典是Python中一种非常实用的数据结构,用于存储键值对(Key-Value Pair)。与列表不同,字典的键必须是不可变类型(如字符串、数字)且唯一,值可以是任意类型。通过“增、删、改、查”操作,我们可以灵活地管理字典中的数据。
一、字典的基本定义¶
字典用 {} 创建,格式为 {键1: 值1, 键2: 值2, ...}。例如:
student = {
'name': '小明',
'age': 18,
'gender': '男'
}
- 键(Key):唯一且不可变(如字符串、数字),用于定位值。
- 值(Value):可以是任意类型(数字、字符串、列表、字典等)。
二、字典的“增”:添加键值对¶
给字典新增键值对时,直接通过赋值操作实现(若键不存在则新增,若键已存在则修改)。
1. 直接赋值(新增/修改)¶
student = {'name': '小明', 'age': 18}
# 新增键值对(键不存在时)
student['gender'] = '男'
print(student) # 输出:{'name': '小明', 'age': 18, 'gender': '男'}
# 修改已有键的值(键存在时)
student['age'] = 19
print(student) # 输出:{'name': '小明', 'age': 19, 'gender': '男'}
三、字典的“删”:删除键值对¶
删除操作用于移除字典中的某个键值对,常用方法有 del、pop()、popitem() 和 clear()。
1. del 语句:删除指定键¶
student = {'name': '小明', 'age': 18, 'gender': '男'}
del student['age'] # 删除键 'age'
print(student) # 输出:{'name': '小明', 'gender': '男'}
- 注意:若键不存在,会报错
KeyError。
2. pop() 方法:删除并返回值¶
pop(key, default):若键存在,删除并返回该键的值;若键不存在,返回 default(默认 None)。
student = {'name': '小明', 'age': 18}
# 删除 'name' 并返回其值
name = student.pop('name')
print(name) # 输出:小明
print(student) # 输出:{'age': 18}
# 键不存在时指定默认值
score = student.pop('score', '未知')
print(score) # 输出:未知
3. popitem() 方法:删除最后一个键值对¶
Python 3.7+ 中,popitem() 删除并返回最后插入的键值对(之前版本随机删除)。
student = {'name': '小明', 'age': 18, 'gender': '男'}
item = student.popitem() # 删除最后一个键值对
print(item) # 输出:('gender', '男')
print(student) # 输出:{'name': '小明', 'age': 18}
4. clear() 方法:清空字典¶
student = {'name': '小明', 'age': 18}
student.clear() # 清空字典
print(student) # 输出:{}
四、字典的“改”:修改已有键的值¶
若键已存在,通过赋值操作直接覆盖旧值即可:
student = {'name': '小明', 'age': 18}
student['age'] = 19 # 修改 'age' 的值
print(student) # 输出:{'name': '小明', 'age': 19}
- 本质:与“新增”操作一致(键存在则修改,不存在则新增)。
五、字典的“查”:获取键对应的值¶
查询值的方式有多种,推荐优先使用 get() 避免报错。
1. 直接用键访问(易报错)¶
student = {'name': '小明', 'age': 18}
print(student['name']) # 输出:小明
# print(student['score']) # 错误:KeyError: 'score'(键不存在)
2. get() 方法(安全查询)¶
get(key, default):键存在则返回值,不存在则返回 default(默认 None)。
student = {'name': '小明', 'age': 18}
# 键存在时返回值
print(student.get('name')) # 输出:小明
# 键不存在时返回默认值
score = student.get('score', '0分')
print(score) # 输出:0分
3. 批量查询键/值/键值对¶
keys():获取所有键(返回视图对象,可转为列表)。values():获取所有值(返回视图对象)。items():获取所有键值对(返回元组视图)。
student = {'name': '小明', 'age': 18, 'gender': '男'}
print(student.keys()) # 输出:dict_keys(['name', 'age', 'gender'])
print(student.values()) # 输出:dict_values(['小明', 18, '男'])
print(student.items()) # 输出:dict_items([('name', '小明'), ('age', 18), ('gender', '男')])
# 转为列表便于遍历
print(list(student.keys())) # 输出:['name', 'age', 'gender']
六、注意事项¶
- 键必须唯一且不可变:重复键会被覆盖,列表、集合不能作为键。
my_dict = {[1,2]: 'test'} # 错误:列表不可作为键
- 避免键不存在导致的错误:查询时优先用
get(),而非直接用键访问。 - 修改与新增的统一性:
dict[key] = value既可以新增也可以修改,取决于键是否存在。
通过以上“增、删、改、查”操作,你可以灵活管理字典中的数据。日常使用中,建议优先用 get() 查询、pop() 删除,并注意键的唯一性和不可变性。