【10月更文挑战第9天】
思考:如果有多个数据,例如:“凯子”,“男”,19,如何快速存储这些数据
多数我们是通过列表进行存储的
li=['凯子','男',19]
在定义完这个列表之后我们如何来找到数据'凯子'呢?
我们可以通过索引
print(li[0])
如果将来数据顺序发生改变的话,还能用索引值进行访问吗
答案是不能的
数据顺序发生变化,每个数据的下标也随之变化,如何保证数据顺序变化前后能使用同一种方法查找数据呢?
那么这里就涉及到了字典
字典的定义
定义:{‘键’:'值',‘键’:'值'}
1.字典的数据,都是以键值对的方式----键和值都要成对出现
2.键值对之间用逗号隔开
字典的定义:
d={'name':'凯子','age':19,'sex':'男'}
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男'}
print(type(d))
#<class 'dict'>
获取字典内值的方式:字典[键]
#上面已经将字典定义好了,但是我们现在怎么进行拿值的操作呢?
#获取值---字典[键]:
#序列类型是有顺序的,散列类型是没有顺序的
#字典也是没有顺序的,如果想访问值的话,我们是需要通过键进行获取的
print(d['name'])
#凯子
#我们将顺序进行改变的话我们仍然能进行访问
序列类型是有顺序的,散列类型是没有顺序的
字典也是没有顺序的,如果想访问值的话,我们是需要通过键进行获取的
在字典之内不管顺序怎么变我们都能通过键进行访问
字典注意事项
键必须是唯一的
#键必须是唯一的
d={'name': '凯子', 'age': 19, 'sex': '男',"name":"小明"}
print(d)
#{'name': '小明', 'age': 19, 'sex': '男'}
#之前定义的凯子就被这个小明给替换掉了
#如果在字典里面出现重复的键,那么前面的键值对会被后面的键值对给替换掉
'''
因为我们之前就说明了
在字典中对数值的访问我们只能通过键
那么现在有两个一样的键,那么我们是不知道访问谁的
所以在字典中键必须是唯一的
如果同时出现一样的键,那么前面的键值对会被后面键值对提坏
如果确实要定义两个名字的话,我们可以在name后面加上数字进行区分
'''
如果在字典里面出现重复的键,那么前面的键值对会被后面的键值对给替换掉
最好的解决方法就是在键后面加上数字进行区分
键值对必须成对出现,不然就会报错
字典中的键,只能是不可以修改的类型(字符串、元组、数字)
所以我们是不能用列表作为键
字典的操作方式---增删改查
1.获取值---字典[键]:获取对应键的值
#获取小明这个值
#字典[键]
print(d['name'])
2.修改值---字典[键]=新值
d={'name':'凯子','age':19,'sex':'男'}
d['name']="小红"
print(d)
#{'name': '小红', 'age': 19, 'sex': '男'}
3.添加键值对---字典[新键]=新值
d['name3']='小兰'
print(d)
#{'name': '小红', 'age': 19, 'sex': '男', 'name3': '小兰'}
字典[键]=新值
对于这个,键存在,那么就是对这个键指向的值进行修改
如果不存在的话,就是新添加一个新的键以及这个键指向的新值
4.获取字典中的值的方式
1.1字典[键]:获取对应键的值
1.2字典.get(键,键不存在的提示)
print(d.get('name'))
#小红
print(d.get('age'))
#19
print(d.get('age1'))
#None
'''
这种方式就会进行一个提示,如果我们输入的键是不存在的话
那么就会提示我们None,说明字典里面并没有这个键
'''
#除此之外,我们是可以自己设置这个提示,提醒我们这个键不存在
print(d.get('age1','键不存在'))
#键不存在
我们可以在这个get函数进行键对应值的查找,并且我们还能判断键是否存在
可以对键不存在的信息进行设置
5.setdefault(键,值)---键存在,返回对应的值
键不存在就会将键值对进行添加
d={'name':'凯子','age':19,'sex':'男'}
print(d.setdefault('name5','kk'))
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男', 'name5': 'kk'}
#这里的name5就是不存在的键
#通过这种方法我们直接将这个键放到字典中
print(d.setdefault('name5','55'))
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男', 'name5': 'kk'}
#r如果我们输入的键是存在的话,那么我们就不进行额外的操作了
如果我们输入的键是存在的话,那么我们就不进行额外的操作了
如果我们输入的键是不存在的话,那么我们就在这个字典中添加这个键以及这个键对应的值
但是如果存在的话,我们是不进行额外的操作的
我们仅仅只需要进行键对应的值的打印
setdefault返回的一般是键对应的值
字典.setdefault(键,’数据‘)
小回顾:
#当前字典里面有三对键值对
#键和值之间的分割符是冒号
#键值对之间的分隔符是逗号
#用花括号将所有的键值对进行包裹
d={'name':"小明",'age':18,'sex':'男'}
#获取小明这个值
#字典[键]
print(d['name'])
#修改值---字典[键]=新值
d['name']="小红"
print(d)
#添加值--字典[新键]=新值
d['name1']="小工"
print(d)
#这个name1这个键是之前没出现过的
#所以编译器会将这个键和其对应的值会作为键值对添加到字典中
print(d.get('name'))
#小红
#如果不存在我们想寻找的键值对的话,那么编译器会通过这个函数将这个键值对添加到字典之中
print(d.setdefault('name5',"kaizi"))
print(d)
print(d.setdefault('name'))
#如果这个键存在的话,那么setdefault就会返回这个键对应的值
6.update()---添加多个键值对
字典.update(字典)
update添加多个键值对的使用方法:
#{'name': '小红', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'}
#在原有的字典中添加键值对
d.update({'name2':"小李",'age2':'15'})
print(d)
'''
{'name': '小红', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李', 'age2': '15'}
'''
#这个就是在update的括号内添加一个字典
7.pop(键)---删除指定的键值对
#{'name': '小红', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'}
#删除小红
d.pop('name')
print(d)
'''
{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李', 'age2': '15'}
'''
#在列表中对元素进行删除的时候使用pop我们在括号内不输入元素的索引值
#那么默认就是删除最后一个元素
#但是现在我们这里的字典的话使用删除的方法的时候我们一定要在括号内加上要删除的键值对的键
在列表中对元素进行删除的时候使用pop我们在括号内不输入元素的索引值
那么默认就是删除最后一个元素
但是现在我们这里的字典的话使用删除的方法的时候我们一定要在括号内加上要删除的键值对的键
pop的内容里面必须要有内容,没有内容的话就是会报错的
8.poptiem()---删除最后一个键值对
d.popitem()
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李'}
d.popitem()
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'}
#返回关键字和值构成的元组
print(d.popitem())
#('name5', 'kaizi')
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工'}
print(d.popitem())
#('name1', '小工')
#返回的值就是要删除的键值对组成的元组
#返回关键字和值构成的元组
print(d.popitem())
#('name5', 'kaizi')
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工'}
print(d.popitem())
#('name1', '小工')
#返回的值就是要删除的键值对组成的元组
9.values()获取字典中所有的值
字典.values()
d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.values())
#dict_values(['小明', 18, '男', '小红'])
for i in d.values():
print(i)
'''
小明
18
男
小红
对于这个循环的写法,我们编译器会先执行这个d.values的方法,
print(d.values())
#dict_values(['小明', 18, '男', '小红'])
获取到字典中的值
这些值都被存在一个列表中
然后我们i遍历这个列表打印每一个值
'''
我们将d.values写到for循环的条件中
我们先进行d.values的编译,然后生成了一个列表,这个列表里面存着的就是这个字典里面的数据
然后i进行这个列表的遍历,然后进行数据的打印
10.keys()---获取字典中所有的键
d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.keys())
#dict_keys(['name', 'age', 'sex', 'name1'])
#同样,获取的键也会存在列表中
#那么我们也可以同样利用for循环遍历这个链表进行键的打印
for i in d.keys():
print(i)
'''
name
age
sex
name1
'''
将获取的键存在列表中,利用for循环进行遍历列表,打印每一个键
11.items()---获取字典中所有的键值对
#利用items就能获取这个字典内的键值对,得到的键值对会被存在列表中
#每一个键值对在列表中存在的元素是元组形式的
d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.items())
'''
dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小红')])
'''
#我们从这个存储键值对的列表中进行遍历,打印每一个键值对
for i in d.items():
print(i)
'''
('name', '小明')
('age', 18)
('sex', '男')
('name1', '小红')
'''
用键:值这个格式将字典内的键值对表示出来
因为我们使用items获取到的键值对是以元组形式存进这个列表的
那么我们随着i的变化就能进行列表中所有键值对的访问,也就是对元组的访问
那么我们是可以通过索引值访问元组内的元素的
这个元组内的元素下标为0就是键,1就是键指向的数据
那么我们就可以利用循环将这个格式进行输出
利用索引值将键值队的格式表现出来:
#键值对存在列表中
#对于这个循环来说,i存放的数据是键值对的数据,键值对输出的格式是---键:值
#因为键值对存在列表中,所以我们是可以用下标进行访问的
d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.items())
#dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小红')])
for i in d.items():
#print(i)
#通过索引的方式将键和值单独的获取
#键值对在这个列表中存在的形式是元组
#通过i的变化,我们访问每一个键值对
#那么我们就可以用i+索引进行元组内元素的访问的操作了
print(i[0])#访问的是键
print(i[1])#访问的是值
print(f'{i[0]}:{i[1]}')
'''
那么我们通过循环就打印出这么个样子
name:小明
age:18
sex:男
name1:小红
和我们预期的是一样的
'''
除了使用索引,我们还能使用拆包的方法
回顾一下什么事拆包
元组可以同时赋值给多个变量,只要变量个数不超过元组长度,变量前面加上* 号则可以将多于元素都接受,并组成一个列表
d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.items())
#dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小红')])
for i in d.items():
a,b=i
## print(a)
## print(b)
print(f'{a}:{b}')
'''
随着i的遍历,每次都指向着不同的元组,就是指向不同的键值对
那么所以说i种存在两个值,就是键和键指向的值
那么我们就利用元组的拆包的操作
将键值对这两个值存在我们创建的两个变量中
a就是存储键
b就是存储值了
那么我们利用循环,i遍历整个列表我们将整个列表中的元素都进行打印了
'''
#两种方法都能实现我们想要的效果
'''
name:小明
age:18
sex:男
name1:小红
'''