字典:用来存放一组键值对数据,可通过键对值进行增删改查操作。
字典用大括号{}包裹,每个元素之间用逗号,分隔,每个元素的格式为key:value。
示例代码:
d1 = {'张三': 72, '李四': 60, '王五': 85}
print(type(d1), d1) # <class 'dict'> {'张三': 72, '李四': 60, '王五': 85}
字典中的key不能重复,若出现重复,则后写的会覆盖之前写的。
d1 = {'张三': 72, '李四': 60, '王五': 85, '张三': 99}
print(type(d1), d1) # <class 'dict'> {'张三': 99, '李四': 60, '王五': 85}
定义空字典。
d3 = {}
d33 = dict()
print(type(d3), d3) # <class 'dict'> {}
print(type(d33), d33) # <class 'dict'> {}
字典中的key必须是不可变类型,但value可以是任意类型。
d4 = {252: 72, '李四': 88, '王五': 41}
d5 = {('抽烟', '喝酒'): 0, '李四': 88, '王五': 79}
print(type(d4), d4) # <class 'dict'> {252: 72, '李四': 88, '王五': 41}
print(type(d5), d5) # <class 'dict'> {('抽烟', '喝酒'): 0, '李四': 88, '王五': 79}
d6 = {['抽烟', '喝酒']: 0, '李四': 88, '王五': 79} # 运行报错:TypeError: unhashable type: 'list',列表是可变类型不能作为key
字典可以嵌套。
student_dict = {
2025001: {
'姓名': '张三',
'年龄': 18,
'成绩': 72,
'爱好': ['抽烟', '喝酒', '烫头']
},
2025002: {
'姓名': '李四',
'年龄': 19,
'成绩': 60,
'爱好': ['唱歌', '跳舞', '打台球']
},
2025003: {
'姓名': '王五',
'年龄': 20,
'成绩': 85,
'爱好': ['学习', '看书', '打太极']
},
}
print(type(student_dict), student_dict)
新增语法:字典[key] = 值
d1 = {'张三': 72, '李四': 60, '王五': 85}
d1['赵六'] = 100
print(d1) # {'张三': 72, '李四': 60, '王五': 85, '赵六': 100}
删除有三种方式:
del 字典[key]除指定key所对应的那组键值对。字典.pop(key, default)删除指定Key所对应的那组键值对,并返回这个key所对应的值。如果key不存在,返回default(如果没有设置default,则会报错)。d1.clear()清空字典。示例代码:
d1 = {'张三': 72, '李四': 60, '王五': 85}
# 删除指定key所对应的那组键值对
del d1['李四']
print(d1)
# 删除指定Key所对应的那组键值对,并返回这个key所对应的值
result = d1.pop('张三')
print(result) # 72
print(d1) # {'王五': 85}
# pop方法可以设置默认值
# 默认值可以保证,当要删除的key不存在的情况下,程序不会报错,并且返回这个默认值
# result = d1.pop('赵六') # 没有默认值,运行则会报错:KeyError: '赵六'
result = d1.pop('赵六', '删除失败')
print(result) # 删除失败
# 清空字典
print(d1)
d1.clear()
print(d1) # {}
修改单个元素,与新增的语法一样,字典[key] = 值,若字典中有对应的key则修改,否则为新增。
批量修改的语法为:字典.update(字典)。
示例代码:
d1 = {'张三': 72, '李四': 60, '王五': 85}
d1['张三'] = 92
print(d1) # {'张三': 92, '李四': 60, '王五': 85}
# 批量修改
d1.update({'李四':99, '王五': 88, '赵六': 100})
print(d1) # {'张三': 92, '李四': 99, '王五': 88, '赵六': 100}
查询方式两种:
字典[key]直接取值,若key不存在,会报错。字典.get(key, default)安全取值,若key不存在,会返回默认值,如果没有设置默认值,则会返回None。示例代码:
d1 = {'张三': 72, '李四': 60, '王五': 85}
# 直接取值
print(d1['张三']) # 72
# print(d1['张三丰']) # 运行报错:KeyError: '张三丰'
# 安全取值
print(d1.get('李四')) # 60
print(d1.get('张三丰')) # None
print(d1.get('张三丰', '抱歉,key 不存在!')) # 抱歉,key 不存在!
keys方法,获取字典中所有的键。
该方法返回值不是list,是一种叫做dict_keys的类型。但是dict_keys和列表类似,可以被遍历,但要注意的是:它不能通过下标访问元素。借助内置的list函数,可以将dict_keys转换成list。
d1 = {'张三': 72, '李四': 60, '王五': 85}
result = d1.keys()
print(type(result), result) # <class 'dict_keys'> dict_keys(['张三', '李四', '王五'])
# 遍历dict_keys
for item in result:
print(item)
# 将dict_keys转换成list
l1 = list(result)
print(type(l1), l1) # <class 'list'> ['张三', '李四', '王五']
values方法,获取字典中所有的值。
该方法返回的值类型是dict_values,它的特点和dict_keys一样。
d1 = {'张三': 72, '李四': 60, '王五': 85}
result = d1.values()
print(type(result), result) # <class 'dict_values'> dict_values([72, 60, 85])
# 遍历dict_values
for item in result:
print(item)
# 将dict_values转换成list
l1 = list(result)
print(type(l1), l1) # <class 'list'> [72, 60, 85]
items方法,获取字典中所有的键值对,每组键值对以元组的形式呈现。
该方法返回的值类型是dict_items,它的特点和dict_keys一样。
d1 = {'张三': 72, '李四': 60, '王五': 85}
result = d1.items()
print(type(result), result) # <class 'dict_items'> dict_items([('张三', 72), ('李四', 60), ('王五', 85)])
# 遍历dict_items
for item in result:
print(item, type(item))
# 遍历打印结果:
# ('张三', 72) <class 'tuple'>
# ('李四', 60) <class 'tuple'>
# ('王五', 85) <class 'tuple'>
# 将dict_items装成list
l1 = list(result)
print(type(l1), l1) # <class 'list'> [('张三', 72), ('李四', 60), ('王五', 85)]
字典不能使用while循环遍历,要使用for来循环遍历。
d1 = {'张三': 72, '李四': 60, '王五': 85}
for key in d1:
print(key, d1[key])
for key in d1.keys():
print(key, d1[key])
# 这两种写法运行结果一致,如下:
# 张三 72
# 李四 60
# 王五 85
key:value的形式存在,每个键都对应一个值。一句话总结:字典是一种以“键”找“值”的映射型容器,当需要【唯一标识 -> 对应信息】的结构时,首选字典。