Python(五)字典

一、一个简单的字典

来介绍一个人的信息。

python 复制代码
people={'name':'Lucy','age':20}
print(people['name'])   # Lucy
print(people['age'])    # 20

字典people存储了这个人的姓名和年龄。最后两行代码访问并显示这些信息。

二、使用字典

在Python中,字典 (dictionary)是一系列键值对 (key-value pair)。每个键都与一个值关联,可以使用键来访问与之关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将任意Python对象用作字典中的值。

在python中,字典用放在花括号({})中的一系列键值对表示,如前面的示例所示:

python 复制代码
people={'name':'Lucy','age':20}

键值对包含两个相互关联的值。当你指定键时,Python将返回与之关联的值。键和值之间用冒号分隔,而键值对之间用逗号分隔。在字典中,你想存储多少个键值对都可以。

1、访问字典中的值

要获取与键关联的值,可指定字典名并把键放在后面的方括号内:

python 复制代码
people={'name':'Lucy','age':20}
print(people['name'])   # Lucy

2、添加键值对

字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起来的键和与该键关联的值。下面来在字典people中添加两项信息:

python 复制代码
people={'name':'Lucy','age':20}
print(people)
people['position']='ShenYang'
people['sex']='girl'
print(people)
output 复制代码
{'name': 'Lucy', 'age': 20}
{'name': 'Lucy', 'age': 20, 'position': 'ShenYang', 'sex': 'girl'}

这个字典最终包含4个键值对。字典会保留定义时的元素排列顺序。如果将字典打印出来或遍历其元素,将发现元素的排列顺序与其添加顺序相同。

3、创建一个空字典

可先使用一对花括号定义一个空字典,再分行添加各个键值对。

python 复制代码
people={}
people['name']='Lucy'
people['age']=20
print(people)

如果要使用字典来存储用户提供的数据或者编写能自动生成大量键值对的代码,通常需要先定义一个空字典。

4、修改字典中的值

要修改字典中的值,可依次指定字典名、用方括号括起来的键和与该键关联的新值。

python 复制代码
people={'name':'Lucy','age':20}
people['age']=22

5、删除键值对

对于字典中不再需要的信息,可使用del语句将相应的键值对彻底删除。在使用del语句时,必须指定字典名和要删除的键。

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
print(people)
del people['position']
print(people)
output 复制代码
{'name': 'Lucy', 'age': 20, 'position': 'ShenYang', 'sex': 'girl'}
{'name': 'Lucy', 'age': 20, 'sex': 'girl'}

6、由类似的对象组成的字典

可以使用字典来存储众多对象的同一种信息。

python 复制代码
peoples={
    'Lucy':'ShenYang',
    'David':'TieLing',
    'Bob':'England'
}

每个键都是姓名,而每个值都是该人的家乡。当确定需要使用多行来定义字典时,先在输入左花括号后按回车键,再在下一行缩进4个空格,指定第一个键值对,并在它后面加上一个逗号。此后再按回车键,定义好字典后,在最后一个键值对的下一行添加一个右花括号。

7、使用get()来访问值

使用放在方括号内的键从字典中获取感兴趣的值,可能会引发问题:如果指定的键不存在,就将出错。

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
print(people['hobby'])

这将导致Python显示traceback,指出存在键值错误。

为避免出现这样的错误,可使用get()方法在指定的键不存在时返回一个默认值。get()方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的:

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
hobby=people.get('hobby','No hobby value')
print(hobby)
output 复制代码
No hobby value

如果指定的键有可能不存在,应考虑使用get()方法,而不要使用方括号表示法。在调用get()时,如果没有指定第二个参数且指定的键不存在,Python将返回值None,这个特殊的值表示没有相应的值。

三、遍历字典

字典可用于以各种方式存储信息,因此有多种遍历方式:既可遍历字典的所有键值对,也可只遍历键或值。

1、遍历所有的键值对

使用for循环遍历字典。

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for key,value in people.items():
    print(key,':',value)
output 复制代码
name : Lucy
age : 20
position : ShenYang
sex : girl

2、遍历字典中的所有键

在不需要使用字典中的值时,keys()方法很有用。

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for key in people.keys():
    print(key)
output 复制代码
name
age
position
sex

如果显式地使用keys()方法能让代码更容易理解,如果省略keys()方法,在遍历字典时,会默认遍历所有的键。在这种循环中,可使用当前的键来访问与之关联的值。

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for key in people.keys():
    print(key,':',people[key])
output 复制代码
name : Lucy
age : 20
position : ShenYang
sex : girl

keys()方法并非只能用于遍历:实际上,它会返回一个列表,其中包含字典中的所有键。

3、遍历字典中的所有值

如果你想获得字典包含的值,可使用values()方法。它会返回一个值列表,不包含任何键。

python 复制代码
people={'name':'Lucy','age':20,'position':'ShenYang','sex':'girl'}
for value in people.values():
    print(value)
output 复制代码
Lucy
20
ShenYang
girl

这种做法提取字典中所有的值,而没有考虑值是否有重复。为剔除重复项,可使用集合(set)。集合中的每个元素都必须是独一无二的。

python 复制代码
languages={
    'Lucy':'java',
    'Bob':'python',
    'Alice':'java',
    'David':'javascript'
}
for language in set(languages.values()):
    print(language)

结果是一个没有重复元素的列表。

output 复制代码
java
python
javascript

四、嵌套

有时候,需要将多个字典存储在列表中或将列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表,甚至在字典中嵌套字典。

1、字典列表

python 复制代码
people1={'name':'Lucy','age':20}
people2={'name':'Bob','age':19}
people3={'name':'Alice','age':22}

peoples=[people1,people2,people3]
for person in peoples:
    print(person)
output 复制代码
{'name': 'Lucy', 'age': 20}
{'name': 'Bob', 'age': 19}
{'name': 'Alice', 'age': 22}

2、在字典中存储列表

python 复制代码
classes={
    'teacher':'Wang',
    'students':['liming','zhangsan','wanger']
}
for student in classes['students']:
    print(student)
output 复制代码
liming
zhangsan
wanger

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。

3、在字典中存储字典

可以在字典中嵌套字典,但这可能会让代码变得非常复杂。

python 复制代码
classes={
    'classone': {
        'teacher':'wang',
        'student':'Lucy'
    },
    'classtwo': {
        'teacher':'zhang',
        'student':'Bob'
    }
}
for class_name,class_dict in classes.items():
    print(class_name,':',class_dict)
output 复制代码
classone : {'teacher': 'wang', 'student': 'Lucy'}
classtwo : {'teacher': 'zhang', 'student': 'Bob'}
相关推荐
程序猿DD5 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
VidDown7 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
余槐i8 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8268 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
死磕音视频9 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林9 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne10 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF10 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li11 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook11 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python