AI项目博客
记录 AI 工程实践与大模型应用

Python 学习笔记 14|数据容器 · 字典

8. 字典

8.1. 概述

字典:用来存放一组『键值对』数据,可通过『键(key)』对『值(value)』进行:增、删、改、查操作。

字典就像一个带标签的收纳盒,你贴上标签(键),然后放进东西(值) 。

8.2. 定义字典

用大括号{}包裹,每个元素之间用逗号,分隔,每个元素的格式为key:value

# 定义有内容的字典
d1 = {'张三': 72, '李四': 60, '王五': 85}
print(type(d1), d1)

字典中的 key 不能重复,若出现重复,则后写的会覆盖之前写的。

# 字典中的key不能重复,若出现重复,则后写的会覆盖之前写的
d1 = {'张三': 72, '李四': 60, '王五': 85, '张三': 99}
print(d1)

定义空字典

# 定义空字典
d1 = {}
d2 = dict()
print(type(d1), d1)
print(type(d2), d2)

字典中的 key 必须是不可变类型,但 value 可以是任意类型。

# 字典中的key必须是不可变类型,但value可以是任意类型
# 通俗理解:只有不可变的东西,才能作为key
d1 = {250: 72, '李四': 60, '王五': 85}
d2 = {('抽烟', '喝酒'): 72, '李四': 60, '王五': 85}
# print(d1)
# print(d2)

# 错误示例:将列表作为key,是不行的
# d2 = {['抽烟', '喝酒']: 72, '李四': 60, '王五': 85}

字典可以嵌套

# 字典可以嵌套
student_dict = {
    2025001: {
        '姓名': '张三',
        '年龄': 18,
        '成绩': 72,
        '爱好': ['抽烟', '喝酒', '烫头']
    },
    2025002: {
        '姓名': '李四',
        '年龄': 19,
        '成绩': 60,
        '爱好': ['唱歌', '跳舞', '打台球']
    },
    2025003: {
        '姓名': '王五',
        '年龄': 20,
        '成绩': 85,
        '爱好': ['学习', '看书', '打太极']
    }
}
print(student_dict)

8.3. 字典的增删改查

1️⃣新增

新增语法:字典[key] = 值

# 新增
d1 = {'张三': 72, '李四': 60, '王五': 85}
d1['赵六'] = 100
print(d1)

2️⃣删除

# 删除
d1 = {'张三': 72, '李四': 60, '王五': 85}

# 删除指定key所对应的那组键值对
del d1['张三']
print(d1)

# 删除指定key所对应的那组键值对,并返回这个key所对应的值
result = d1.pop('张三')
print(d1)
print(result)

# pop方法可以设置默认值
# 默认值可以保证:当要删除的key不存在的情况下,程序不会报错,并且返回这个默认值
result = d1.pop('奥特曼', '删除失败!')
print(d1)
print(result)

# 清空字典
d1.clear()
print(d1)

3️⃣修改

d1 = {'张三': 72, '李四': 60, '王五': 85}

# 修改的写法,与新增的写法一样,若字典中有对应的key,就是修改;若没有,就是新增
d1['张三'] = 97
print(d1)

# 批量修改
d1.update({'李四': 40, '王五': 67})
print(d1)

4️⃣查询

# 查询
d1 = {'张三': 72, '李四': 60, '王五': 85}

# 直接取值,若键(key)不存在,会报错
result = d1['张三']

# 安全取值,若键(key)不存在,会返回默认值(若没有设置默认值,则会返回None)
result = d1.get('奥特曼', '抱歉,key不存在!')
print(result)

8.4. 字典的常用方法

1️⃣使用keys方法,获取字典中所有的键。

# keys方法:用于获取字典中所有的键
d1 = {'张三': 72, '李四': 60, '王五': 85}

# keys方法的返回值不是list,而是一种叫做dict_keys的类型
result = d1.keys()
print(result)
print(type(result))

# dict_keys和列表类似,可以被遍历,但要注意的是:它不能通过下标访问元素
for item in result:
    print(item)
print(result[0])

# 借助内置的list函数,可以将dict_keys转换成list
l1 = list(result)
print(l1)
print(type(l1))

2️⃣使用values方法,获取字典中所有的值。

# values方法:获取字典中所有的值
d1 = {'张三': 72, '李四': 60, '王五': 85}
# values方法的返回值类型是:dict_values,它的特点和dict_keys一样
result = d1.values()
print(result)
print(type(result))

3️⃣使用items方法,获取字典中所有的键值对(每组键值对以元组的形式呈现)

# items方法:获取字典中所有的键值对(每组键值对以元组的形式呈现)
d1 = {'张三': 72, '李四': 60, '王五': 85}

# items方法返回的类型是:dict_items,它的特点也和dict_keys一样
result = d1.items()
print(result)
print(type(result))

8.5. 字典的循环遍历

字典不能使用while循环遍历,但可以使用for循环遍历

# 字典不能使用while循环遍历,但可以使用for循环遍历
d1 = {'张三': 72, '李四': 60, '王五': 85}

for key in d1:
    print(f'{key}的成绩是{d1[key]}')

for key in d1.keys():
    print(f'{key}的成绩是{d1[key]}')

8.6. 字典总结

  • 键值对结构:字典中的数据以key:value的形式存在,每个键都对应一个值。
  • 键唯一:字典中的键(key)不能重复,若重复则后写的会覆盖前写的。
  • 键不可变::键必须是不可变类型(如数字、字符串、元组等),而值可以是任意类型。
  • 不支持下标:字典中的元素不能通过下标取值。
  • 支持增删改查,支持for循环遍历。

📍一句话总结:字典是一种以“键”找“值”的映射型容器,当需要唯一标识 → 对应信息的结构时,首选字典。

9. 数据容器_通用操作

我们之前在讲解【列表常用函数时】给大家总结过如下这些函数,这些函数也同样适用于其它数据容器

除了上述这些内置函数以外,数据容器都可以进行如下通用操作

  • list函数: 1.定义空列表;2.将【可迭代对象】转换为列表。
  • tuple函数:1.定义空元组;2.将【可迭代对象】转换为元组。
  • set函数: 1.定义空集合;2.将【可迭代对象】转换为集合。
  • str函数: 1.定义空字符串;2.将【任意类型】转换为字符串。
  • dict函数: 1.定义空字典;2.将【可迭代对象】转换为字典。
  • 所有的数据容器,都支持【成员运算符】 in / not in 作用:判断某个元素是否在于容器中。
# 以下这五个函数:既能定义对应的【空容器】,又能将【其他类型】转换为对应的数据类型

# 1.list 函数:1.定义空列表。2.将【可迭代对象】转换为列表
res1 = list(range(8))
res2 = list('欢迎来到')
res3 = list({10, 20, 30, 40, 50})
res4 = list({'张三': 75, '李四': 60, '王五':85}.items())
print(type(res1), res1)
print(type(res2), res2)
print(type(res3), res3)
print(type(res4), res4)

# 2.tuple 函数:1.定义空元组。2.将【可迭代对象】转换为元组
res1 = tuple(range(8))
res2 = tuple('欢迎来到')
res3 = tuple({10, 20, 30, 40, 50})
res4 = tuple({'张三': 75, '李四': 60, '王五':85})
print(type(res1), res1)
print(type(res2), res2)
print(type(res3), res3)
print(type(res4), res4)

# 3.set 函数:1.定义空集合。2.将【可迭代对象】转换为集合
res1 = set(range(8))
res2 = set('欢迎来到')
res3 = set({10, 20, 30, 40, 50})
res4 = set({'张三': 75, '李四': 60, '王五':85})
print(type(res1), res1)
print(type(res2), res2)
print(type(res3), res3)
print(type(res4), res4)

# 4.str 函数:1.定义空字符串。2.将【任意类型】转换为字符串
res1 = str(range(8))
res2 = str('欢迎来到')
res3 = str({10, 20, 30, 40, 50})
res4 = str({'张三': 75, '李四': 60, '王五':85})
res5 = str(False)
res6 = str(None)
res7 = str(100)
print(type(res1), res1)
print(type(res2), res2)
print(type(res3), res3)
print(type(res4), res4)
print(type(res5), res5)
print(type(res6), res6)
print(type(res6), res6)
print(type(res7), res7)

# 5.dict 函数:1.定义空字典。2.将【可迭代对象】转换为字典
# 备注:交给dict函数的内容必须是键值对才可以,否则就会报错
res1 = dict({'张三': 75, '李四': 60, '王五':85})
res2 = dict([('张三', 75), ('李四', 60), ('王五', 85)])
res3 = dict((('张三', 75), ('李四', 60), ('王五', 85)))
res4 = dict({('张三', 75), ('李四', 60), ('王五', 85)})
print(type(res1), res1)
print(type(res2), res2)
print(type(res3), res3)
print(type(res4), res4)

# 所有的数据容器,都支持【成员运算符】: in / not in  作用:判断某个“元素”是否在于容器中。
hobby = ['抽烟', '喝酒', '烫头']
nums = (10, 20, 30, 40, 50)
message = 'hello,atgiugu'
citys = {'北京', '天津', '上海', '重庆'}
score = {'张三': 75, '李四': 60, '王五':85}

print('喝酒' not in hobby)
print(20 not in nums)
print('hel' not in message)
print('上海' not in citys)
print('李华' not in score)

10. 数据容器_小练习

11. 数据容器_总结

有序与无序:

  • 有序:列表(list)、元组(tuple)、字符串(str)—— 元素有顺序,可通过下标访问元素。
  • 无序:集合(set)、字典(dict) —— 元素没有固定位置,不能用下标访问。

可修改:

  • 可变:列表(list)、集合(set)、字典(dict) —— 可以对内容进行增、删、改操作。
  • 不可变:元组(tuple) 、字符串(str) —— 内容固定,创建后无法修改。

可重复:

  • 允许重复:列表(list) 、元组(tuple) 、字符串(str)
  • 不允许重复:集合(set) 、字典(dict) 备注:字典的 key 是唯一的,但 value 可重复

赞(0)
未经允许不得转载:AI项目博客 » Python 学习笔记 14|数据容器 · 字典

评论 抢沙发

AI项目博客

专注 AI 工程化落地 —— 覆盖智能体、大模型、Java AI 与 Python 的学习笔记,以及 AI 平台的项目实战记录。

关于本站文章归档

登录

找回密码

注册