字典键值对操作:Python字典的增删改查技巧

字典是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': '男'}

三、字典的“删”:删除键值对

删除操作用于移除字典中的某个键值对,常用方法有 delpop()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']

六、注意事项

  1. 键必须唯一且不可变:重复键会被覆盖,列表、集合不能作为键。
   my_dict = {[1,2]: 'test'}  # 错误:列表不可作为键
  1. 避免键不存在导致的错误:查询时优先用 get(),而非直接用键访问。
  2. 修改与新增的统一性dict[key] = value 既可以新增也可以修改,取决于键是否存在。

通过以上“增、删、改、查”操作,你可以灵活管理字典中的数据。日常使用中,建议优先用 get() 查询、pop() 删除,并注意键的唯一性和不可变性。

小夜