字典
1.字典是“键值对”的无序可变序列
2.字典中的每个元素都是一个“键值对”,包含:“键对象”和“值对象”。
3.可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。
4.列表中我们通过索引(位置参数)找到对应的对象。字典中通过“键对象”找到对应的“值对象”。

一个典型的字典的定义方式:a = {'name':'张三', 'age':18, 'python研发部成员'}
接下来我带着大家一点一点理解这个字典,首先这个字典看着很长,但其实只有三个元素(键值对)
分别是:'name':'张三' 'age':18 'python研究部成员'
他们三个的格式其实都是一样的,所以我们随便用一个 'name':'张三' 进行讲解
'name' 属于键对象,就好像列表中的索引(位置参数),
我们讲过,列表内的元素是有序的,我们可以通过从0开始的数字从而找到每个元素
但是字典是无序的呀,那我们就不能通过有序的数字进行表示了,所以我们通过键对象进行表示,
这也就是为什么我们的键对象不是有序数字,当然我们依然可以使用数字作为键对象,
只不过我们是把数字作为名字进行查找,而不是通过数字的大小顺序
所以我们可以通过键对象找到对应的值对象 '张三' ,并对值对象进行操作,
在 键对象与值对象间,我们需要使用符号 : 来隔开它们
回过头来我们再看资料最上方的三句话,是不是很简单呢。
现在我们应该明白键对象的重要性了,它具有查找值对象的作用,
所以我们要遵循以下规则给键对象和值对象起名:
1.“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。
2.列表、字典、集合这些可变对象,不能作为“键”。
3.并且“键”不可重复。
4.“值”可以是任意的数据,并且可重复。
字典的创建
1.我们可以通过{}、dict()来创建字典对象。
实操:创建字典,使用元组创建字典
a = {'name':'张三'} #{'name': '张三'}
b = dict(name='张三') #{'name': '张三'}
c = {} #空的字典对象
d = dict() #空的字典对象
#使用元组创建字典:
e = dict([("name","张三"),("age",18)]) #{'name': '张三', 'age': 18}
2.通过组合zip()创建字典对象
在元组中我们学过用组合将两个列表合为一个zip形式的元组
在字典中,我们依然可以将两个列表合为一个字典
只需要将第一个列表写好键对象,第二个列表写好值对象接可以啦
实操:字典的组合
a = ['name','age','job'] #键对象列表
b = ['张三',18,'python研发部成员'] #值对象列表
c = dict(zip(a,b)) #组合
print(c) #输出:{'name': '张三', 'age': 18, 'job': 'python研发部成员'}
3.通过fromkeys创建值对象为空的字典
在fromkeys()中添加键对象列表,那么我们会获得一个值对象为空的列表
实操:fromkeys的使用
f = dict.fromkeys(['name','age','job'])
print(f)
#结果:{'name': None, 'age': None, 'job': None}
字典元素的访问
1.通过 [键对象] 获得“值”。若键不存在,则抛出异常。
实操:通过[键对象]访问
a = {'name':'gaoqi','age':18,'job':'programmer'}
b = a['name']
print(b) #输出gaoqi
2.通过get()方法获得“值”。❤️推荐使用。
优点是:指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象。
实操:通过get()访问
a = {'name':'张三','age':18,'job':'programmer'}
b = a.get('name')
print(b) #张三
c = a.get('gender','gender不存在') #逗号后面是设定指定键不存在时默认返回的对象
print(c) #gender不存在
3.列出所有的键值对items()
a = {'name':'张三','age':18}
b = a.items()
print(b) #dict_items([('name', '张三'), ('age', 18)])
4.keys()列出所有的键,values()列出所有的值
实操:分别列出所有的键与值
a = {'name':'张三','age':18}
k = a.keys()
v = a.values()
print(k) #dict_keys(['name', 'age'])
print(v) #dict_values(['张三', 18])
5.len() 键值对的个数
实操:查询键值对个数
a = {'name':'张三','age':18,'job':'python研发部成员'}
num = len(a)
print(num) #3
6.检测一个“键”是否在字典中
实操:检查键对象是否在此字典中
a = {'name':'张三','age':18,'job':'python研发部成员'}
print("name" in a) #True
字典元素添加、修改、删除
1.给字典添加“键值对”。如果“键”已经存在,则修改键值对;如果“键”不存在,则添加“键值对”
实操:键值对的添加与覆盖
a = {'name':'张三','age':18,'job':'python研发部成员'}
a['gender']='男' #不存在,添加新的键值对
a['age'] = 30 #存在,覆盖键值对
print(a)
#输出:{'name': '张三', 'age': 30, 'job': 'python研发部成员', 'gender': '男'}
2.使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,则直接覆盖
a = {'name':'张三','age':18,'job':'python研发部成员'}
b = {'name':'李四','gender':'男'}
a.update(b)
print(a)
#输出:{'name': '李四', 'age': 18, 'job': 'python研发部成员', 'gender': '男'}
3.字典中元素的删除,可以使用del()方法;或者clear()删除所有键值对;
pop()可以删除指定键值对,并返回对应的“值对象”
实操:分别使用del(),clear(),pop()
a = {'name':'张三','age':18,'gender':'男'}
del(a['name']) #删除姓名
print(a) #输出:{'age': 18, 'gender': '男'}
age = a.pop('age') #删除年龄
print(a) #输出:{'gender': '男'}
print(age) #输出:18
a.clear() #删除所有键值对
print(a) #输出:{}
4.popitem() :随机删除和返回该键值对。
字典是“无序可变序列”,因此没有第一个元素、最后一个元素的概念;
若想一个接一个地移除并处理项,这个方法就非常有效(因为不用首先获取键的列表)
实操:使用随机删除,删除掉所有键值对
a = {'name':'张三','age':18,'job':'python研发部成员'}
r1 = a.popitem()
print(r1) #返回被随机删除的键值对('job', 'programmer')
#继续删除
r2 = a.popitem()
r3 = a.popitem()
print(a) #输出:{}
序列解包
序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。
x,y,z=(20,30,10) #快速给x,y,z赋值,使x = 20, y = 30, z = 10
(a,b,c)=(9,8,10) #同理
[m,n,p]=[10,20,30] #同理
序列解包用于字典时
默认是对“键”进行操作;
如果需要对“值”进行操作,则需要使用values();
如果需要对键值对操作,则需要使用items();
实操:快速给a,b,c赋值
s = {'name':'张三','age':18,'job':'python研发部成员'}
a,b,c = s #默认对键进行操作
print(a) #name
a,b,c = s.values() #对值进行操作
print(a) #张三
a,b,c = s.items() #对键值对进行操作
print(a) #('name', '张三')
使用字典和列表存储和访问 表格数据
我们可以创造多个字典,然后再将多个字典储存到一个列表里,形成一个二维列表,
作用是:列表可以帮助我们快速读取与打印多个字典的数据
具体我们可以通过下面代码进行理解:
实操:二维列表的存储
#创建三个带有数据的字典
a1 = {"name":"张三","age":18,"salary":30000,"city":"北京"}
a2 = {"name":"李四","age":19,"salary":20000,"city":"上海"}
a3 = {"name":"王五","age":20,"salary":10000,"city":"深圳"}
#列表的存储:将字典存放在b中
b = [a1,a2,a3]
实操:二维列表的访问
涉及到循环,如果实在看不懂,等学到循环就可以了
#列表的访问:
#打印列表b中第一行的人的薪资
print(b[0].get("salary"))
#打印列表b中所有人的薪资
for i in range(len(b)): #len(b)是列表的长度,所以i循环三次,值分别为0,1,2
print(b[i].get("salary")) #第一次循环i = 0,打印b[0]的薪资,也就是第一行的薪资
#第二次循环i = 1,打印b[1]的薪资,也就是第二行的薪资
#第三次循环i = 1,打印b[2]的薪资,也就是第三行的薪资
#打印表的所有数据
for i in range(len(b)):
print(b[i].get("name"),b[i].get("age"),b[i].get("salary"),b[i].get("city"))
#与打印薪资同理,只不过在print中多打印里几个数据而已
本文主要介绍Python字典相关知识。包括字典是无序可变的键值对序列,可通过{}、dict()、zip()、fromkeys()创建。还讲解了字典元素的访问、添加、修改、删除方法,以及序列解包在字典中的应用,最后介绍了用字典和列表存储、访问表格数据。
22万+

被折叠的 条评论
为什么被折叠?



