目录
零、字典基础
简单字典举例
建立一个字典,包含了姓名学号等信息
information = {'name':'lisa','id':'001'}
print(information['name'])
print(information['id'])
结果:字典 information 存储了姓名和学号,并将其打印出来。
字典是什么
在 python 中,字典是一系列键值对。每一个键都与一个值相关联,你可以使用键来访问相关联的值。
与键相关联的值可以是数、字符串、列表甚至字典。
字典用放在花括号 { } 里的一系列键值对表示,键与值之间用冒号分隔,键值对之间用逗号分隔。可参考前文示例。
你可以在字典中存储多个键值对,而最简单的字典只有一个键值对
>>> information = {'name':'lisa'}
这个字典只存储了一个键值对,说明了 name 是 lisa,‘name’ 是键,与之对应的值为 ‘lisa’
访问字典中的值
要获取键值,需依次指定字典名和键名
>>> information = {'name':'lisa'}
>>> print(information['name'])
lisa
上述代码就返回了 information 中与键 ‘name’ 相关联的值 lisa
而如果键并不存在,则会报错
>>> print(information['id'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'id'
添加键值对
字典是一种动态结构,可以随时在其中添加键值对。
添加键值对时,需依次指定字典名、用方括号括起来的键和相关联的值
information = {'name':'lisa','id':'001'}
print(information)
information['sex'] = 'female'
information['age'] = 18
print(information)
结果:可以看到,字典中增加了两队键值对,键分别是 ‘sex’ 和 ‘age’,值分别是 ‘female’ 和 18
python 3.7后,字典中元素的排列顺序与定义以及添加顺序相同
创建空字典
有时我们需要创建一个空字典,然后在为其添加键值对
可以直接使用一对空花括号来创建一个空字典
information = {}
print(information)
information['name'] = 'lisa'
information['sex'] = 'female'
information['age'] = 18
print(information)
结果:
使用字典来存储用户提供的数据或需要自动生成大量键值对的代码时,通常需要先创建一个空字典。
修改字典中的值
要修改字典中的值,需要依次指定字典名、用方括号括起来的键,以及与改建相关联的新值
比如有时可能我们需要修改一个人的性别
information = {'name':'lisa','id':'001','sex':'male'}
print(f"the sex of {information['name']} is {information['sex']}")
information['sex'] = 'female'
print(f"the sex of {information['name']} is {information['sex']} now")
结果:
删除键值对
有时,对于一些我们不再需要的信息,我们可以使用 del 将其彻底删除,使用 del 时,需指定字典名和要删除的键
比如,我们删除字典中的 ‘sex’ 键值
information = {'name':'lisa','id':'001','sex':'male'}
del information['sex']
print(information)
结果:
由类似对象组成的字典
之前的示例,字典存储的都是一个对象的多个信息。但你完全可以使用字典来存储众多对象的同一信息。
favorite_fruit = {
'lisa':'apple',
'jerry':'pear',
'tom':'peach',
'vegetable':'orange'
}
print(favorite_fruit)
print(f"lisa's favorite fruit is {favorite_fruit['lisa']}")
结果:
这个字典的每个键是不同的名字,而对应的值是他们喜欢的水果。
给定名字,我们就能得到他最爱的水果
使用 get() 来访问值
刚才我们介绍过,如果访问字典中没有的键会出错
但 get() 可以帮我们解决这一问题,在指定键不存在时会返回一个默认值,以此避免出错
get() 的第一个参数用于指定键;第二个参数用于指定键不存在时返回的值,若未指定值,则会返回 None
favorite_fruit = {'lisa':'apple'}
choose_one = favorite_fruit.get('lisa','no value')
choose_two = favorite_fruit.get('tom','no value')
print(choose_one)
print(choose_two)
结果:
壹、遍历字典
遍历所有键值对
之前讲过如何访问字典中的值,但如果要获悉字典中的所有信息,我们就需要使用 for 循环来遍历字典
favorite_fruit = {'lisa':'apple','tom':'pear','vegetable':'orange'}
for name,fruit in favorite_fruit.items():
print(f"{name}'s favorite fruit is {fruit}")
结果:
首先先要声明两个变量,用来存储键值对中的键和值
favorite_fruit.items() 返回一个键值对列表,然后,for 循环依次将每个键值对赋给指定的两个变量,最后再将其打印出来
遍历字典中的所有键
在不需要使用字典中的值时,我们可以使用 keys() 方法
比如,我们要打印所有人的姓名
favorite_fruit = {'lisa':'apple','tom':'pear','vegetable':'orange'}
for name in favorite_fruit.keys():
print(name.title())
结果:
而且,遍历字典时,会默认遍历所有的键,所以我们可以将 keys() 省略,同样能得到上述结果,但是有了 keys() 让代码更容易理解。
同时,如果我们加上 sorted() 就可以按顺序遍历字典中的所有键
可以看到,本来第二的 amy 被重新排序到了第一位。
遍历字典中所有值
和刚才思路一样,只不过我们这次只对字典中的值感兴趣,可以使用 values() 来返回一个值列表
favorite_fruit = {'lisa':'apple','amy':'pear','vegetable':'orange','tom':'apple'}
for fruit in favorite_fruit.values():
print(fruit)
结果:
我们可以看到,我们得到了所有的值,但是有一个重复的值 apple
所以我们可以使用 set 来剔除重复值
favorite_fruit = {'lisa':'apple','amy':'pear','vegetable':'orange','tom':'apple'}
for fruit in set(favorite_fruit.values()):
print(fruit)
结果:利用集合的性质,我们成功的让多出来的 apple 消失了
贰、嵌套
将一系列字典存储在列表中,或将列表作为值存储在字典中,叫做嵌套
字典列表
字典 information 包含一个人的各种信息,但却无法存储第二个人的,更别说更多人的信息。
但是如果我们创建一个字典列表则可能实现此功能
stu_1 = {'name':'lisa','id':'001','sex':'female','age':18}
stu_2 = {'name':'tom','id':'002','sex':'male','age':19}
stu_3 = {'name':'vegetable','id':'003','sex':'male','age':18}
stu_info = [stu_1,stu_2,stu_3]
for student in stu_info:
print(student)
结果:我们建立三个人的字典,并将其保存在一个列表中,然后遍历这个列表,并打印出来
在字典中存储列表
首先创建一个字典,键值对对应着爱吃的水果和水果,但每个人可能爱吃的水果有很多,这时我们就需要将多个值存入列表中,然后将此列表作为字典的值。
favorite_fruit = {
'lisa':['apple','orange','banana'],
'tom':['apple','pear'],
'vegetable':['peach','apple']
}
for name,fruits in favorite_fruit.items():
print(f"\n{name}'s favorite fruit are:")
for fruit in fruits:
print(fruit)
结果:
在字典中存储字典
我们也可以在字典中嵌套字典,但是这样会使代码变得很复杂
比如说我们要存学生信息,我们先定义了一个字典,并把键作为姓名,而值则是另一个字典,另一个字典中又有很多键值对来表示年龄,性别等信息
stu_info = {
'lisa':{'id':'001','sex':'female','age':18},
'tom':{'id':'002','sex':'male','age':19},
'vegetable':{'id':'003','sex':'male','age':18}
}
for name,info in stu_info.items():
print(f"\nname:{name}")
print(f"id:{info['id']}")
print(f"sex:{info['sex']}")
print(f"age:{info['age']}")
结果:
叁、小结
难能更可贵的是,我竟然坚持了下来,每天在键盘上敲敲打打,完成的代码行也越来越多,花费的时间也越来越多,也不知道明天是什么样,是晴天?还是雨天呢?明天又会发生什么呢? 我们不可预期未来,唯有把握现在,加油,朝着幸福的终点继续奔跑吧。未来可期!