python快速入门学习笔记十一:数据容器 之 字典

  • 原创
  • 作者:程序员三丰
  • 发布时间:2026-03-21 09:49
  • 浏览量:17
python入门第十一课,主要学习最重要的数据容器——字典,字典是基于键值对的映射容器,通过键快速存取数据,是组织和检索结构化信息的核心工具。

什么是字典

字典:用来存放一组键值对数据,可通过键对值进行增删改查操作。

定义字典

字典用大括号{}包裹,每个元素之间用逗号,分隔,每个元素的格式为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的形式存在,每个键都对应一个值。
  • 键唯一:字典中的键key不能重复,若重复则后写的会覆盖前写的。
  • 键不可变:键必须是不可变类型(如数字、字符串、元组等),而值可以是任意类型。
  • 不支持下标:字典中的元素不能通过下标取值。
  • 支持增删改查,支持for循环遍历。

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

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/111.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas vue3 three.js 微信支付 PHP全栈开发 Python AI 人工智能