栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python(3.9.7)的字典(全面、细致)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python(3.9.7)的字典(全面、细致)

        当前python版本:3.9.7  软件为pycharm专业版,以下的代码以及截图都是来自pycharm软件下运行

学习目录:

字典的用处:

字典的优势:

字典的特性

字典的写法:

字典的增:

增加:

检查式增加(setdefault):

 字典的删除:

1、删(pop):

2、删除(del全局都可以用)

 3、删除(poitem ):

4、清空(clear)

 字典的改:

1、普通修改

2、合并修改

字典查询:

1、查(get):

 2、普普通通查询法(与get不同)

字典推导式

关于字典的长度写法:

判断字典中是否有key值

 关于字典的循环写法

关于字典的特殊用法:

批量生成字典方法:

 copy复制 同列表一样是浅copy

 小练习(将多个列表合为一个字典)


字典的用处:

        当你的列表数据量大了,你循环列表的时候,速度又慢,还占资源,现在我们可以利用python中自带的字典

字典的优势:

        查询速度快,操作方便,不会根据数据量变大从而查询速度变慢

字典的特性

1、key :value结构

2、key必须为不可变数据类型(字符转、数字、元组)不能被修改的类型才能叫key值

3、key 必须是唯一值(不可重复)(重复的会覆盖久的)

4、一个key对应的value可存放任意数据类型,可修改、可不唯一

5、可嵌套,即value值也可以是字典 (可以嵌套列表)

6、 在pyhon3.7之前是无序的(想要有顺序可以用 ordered_dict),从3.7之后开始变得有序

7、查询速度快,且不受字典大小的影响

字典的写法:
普通写法:

staff_list ={
    "maliu":[22,"CEO",200000] #前面这个"maliu"就是字典中的key值(索引),可以通过这个去查找内容
    "zhangsan":[23,"财务",6000]
    #..........
    
}

dict写法:

a = dict(name='gaoxidong', age=22)

列表式写法:

c = {'ziwojieshao': ['gaoxidong', 22, 'man']}

 “name” : [22,'CEO',‘20000’]  ##“name”为key值,“value”值为:[22,'CEO',‘20000’] 

key值类似我们用的新华字典中的偏旁部首,可以通过关键字眼去快速查询内容

字典的增:

增加:

注意事项:

#如果重复 会覆盖原有的value值  (当你重复对一个key值进行添加,能起到一个修改value的作用,切记key值是固定的无法修改),但是容易误操作将原有的字典改掉

a = dict(a='xiaoming')
a['b'] = 'zhangsan'  #增
a['c'] = ['wangwu', 23, 4000] #key不可重复
print(a) #显示当前
print(a['b'])  #查询字典对应key的value值

 运行结果:

检查式增加(setdefault):

注意事项:

#为了避免覆盖原有的value值,那么我们用检查式添加,这个方法的好处,它会自己判断你所添加的key值在不在字典内,如果不在,会添加,如果存在则会显示原有的value值!

写法:

a = dict(name='gaoxidong')

print(a.setdefault('name', 'jack')) #如果key值存在,则返回旧key的value值(如果key:value重复的情况,不会修改原有的)

b = {
    'age':23
}

print(b.setdefault('name','gaoxidong'))#创建并返回value值(增)#默认在最后添加

print(a, b) #打印a,b两个字典

运行结果:

 字典的删除:

1、删(pop):


写法:

a = dict(gaoxidong=[23, '运维', 6000],
         zhangsan=[26, '运维', 8000],
         )
print(a.pop('gaoxidong')) #删除key值,并返回删除key值的value值

print(a) #删除后打印字典a

a.pop('zhangsan01') #如果key值不存在 会报错

运行结果:

2、删除(del全局都可以用)
 

写法:

a = dict(gaoxidong=[23, '运维', 6000],
         zhangsan=[26, '运维', 8000],
         )

del a['gaoxidong']  #这种删除并不会返回被删除的key值  #在pycharm中这里地方是无法加print的 ##错误写法 print(del a['gaoxidong']) 

print(a)

运行结果:

 3、删除(poitem ):

注意事项:

 #以LIFO的方式删除一对值

##LIFO的方式表示,从最后一个key值删除 ,在py3.7之前是随机删除(因是3.7版本之前字典排序是无序的)

#注意poitem()#小括号内无法填写值,不能删除固定的key值

写法:

a = dict(gaoxidong=[23, '运维', 6000],
         zhangsan=[26, '运维', 8000],
         )

print(a.popitem())  #打印删除的值 #括号内无法填写值
print(a) #打印删除后的结果

运行结果:

删掉了最后一个行字典 

4、清空(clear)

注意事项:

如果你用clear清空的方式,会将你所有的对应 的 字典 全部清空

b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}
print(b.clear())  #这里注意如果你打印的话,返回的是None的值 也就是空,但是效果还是会执行的

print(b)  #打印执行结果

运行结果:

 字典的改:

1、普通修改

写法:

a = dict(gaoxidong=[23, '运维', 6000],
         zhangsan=[26, '运维', 8000],
         )
a["gaoxidong"][1] = "开发"  #将字典“gaoxidong”对应的value值修改(修改列表)
a["gaoxidong"][2] = "10000" 

print(a) 

运行结果:

2、合并修改

注意事项:

#将b字典更新到a字典,如果a字典中有b字典的重复key值,那么b字典的value值会覆盖a字典的value值

#定义列表a
a = dict(gaoxidong=[23, '运维', 6000], 
         zhangsan=[26, '运维', 8000],
         )
#定义列表b
b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}

#将b字典更新到a字典,如果a字典中有b字典的重复key值,那么b字典的value值会覆盖a字典的value值
a.update(b)  #将b字典更新到a字典当中
print(a)

运行结果:

字典查询:

1、查(get):

注意事项:

get查询方法,如果查询的key值不存在,不会报错,只会显示None空

a = dict(gaoxidong=[23, '运维', 6000],
         zhangsan=[26, '运维', 8000],
         )
print(a.get('gaoxidong')) #如果key值存在 则返回value值
print(a.get('gaoxidong01')) #如果key值不存在,不会报错,但是会返回None(为空)
#如果在python中直接写a.get('gaoxidong01')则不会报错 不加print也看不到返回的'None'

运行结果:

 2、普普通通查询法(与get不同)

注意事项:

这个与get的方法不同,这个方法查询,没有会报错,注意两者之间的区别

b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}
print(b['zhangsan'])  #存在则返回一个key值的value值
print(b['zhangsan01'])#不存在的key值则会直接报错
###运行结果
[30, '开发', 12000]
KeyError: 'zhangsan01'  #报错信息

运行结果:

字典推导式

 

a = "候鸡狗猪鼠牛虎兔龙蛇马羊"

b = {i:"test" for i in a}   #字典推导式与列表推导式是非常相似的,不过字典推导式key值不能重复
print(b)

 运行结果:

 

关于字典的长度写法:

注意事项:

 #key与value是一个 所以长度也就是按key值来返回结果的 几个key 长度就是几个

写法:

a = dict(gaoxidong=[23, '运维', 6000],
         zhangsan=[26, '运维', 8000],
         )
print(len(a)) #len()方法同时用于字符串与列表 字典也是可以的 
#key与value是一个 所以长度也就是按key值来返回结果的 几个key 长度就是几个

 运行结果:

 

判断字典中是否有key值

方法:  in

写法:

b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}
print('zhangsan' in b)  #如果key值zhangsan在字典内则返回 True
print('zhangsan01' in b)#如果不在则返回 False

运行结果:

 关于字典的循环写法

注意事项:

当你想把对应value值内包含的列表中单个的显示出来,不可写成 b.values()[1],只能用于循环来取单个值 

这样查询出来的值为元组形式

写法:

#定义列表
b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}
###显示全部key值
print(b.keys())  
#循环写法 
#for i in b.keys(): #values同理
#    print(i)
###显示全部value值
print(b.values()) #这里注意没办法当成列表使用 ##错误示范 b.values()[0] #这样写是错误的
###只能用于循环来单个取值!!!

运行结果:

 以上的写法效率不高,我们可以将其转换为元组的形式:

以下很明显看到 在转换为元组以后,能更方便我们提取里面的 key值与value值

b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}

print(b.items()) #将字典转换为元组
for k,v in b.items(): #将key值vlaue值分别赋值给k,v
    print(k)
    print(v)

运行结果:

 

关于字典的特殊用法:

批量生成字典方法:

写法:

#批量生成字典formkeys(生成多个key与value值)
a = ['gaoxidong', 'zhangsan', 'wangwu']  # 首先定义一个列表
b = dict.fromkeys(a)  # 注意不给默认值的话 字典结果为None(空)
print(b)
c = dict.fromkeys(a, 'test')  # 加一个默认值,但是注意后面加的默认值是固定的
print(c)

运行结果:

 copy复制 同列表一样是浅copy

注意事项:

浅copy 就跟藕断丝连差不多下面有代码跟解释可以自行尝试

写法:

b = {
    'zhangsan': [30, '开发', 12000],
    'lisi': [26, '运维', 8000]
}
c = b.copy()
print(b)
c['zhangsan'][2] = 14000 #如果c的value值修改了,那么b的也会跟着一块变  #这就是浅copy 
print(c,b)

运行结果:

 小练习(将多个列表合为一个字典)

要求:生成一个百人的字典,并且每个value值不能一样

写法:

import random,faker  #没有faker 请用 pip install faker下载,#faker是人名库
#random 随机取值模块
a = []
name = faker.Faker(locale="zh_CN")  #设置中文

for i in range(1, 101):  #我们批量创建100个字典
    # suiji = random.randint(1, 30)
    a.append(f"{name.name()}") #先将内容加入到列表中
print(a)
###列表推导式方法 a = [f"{name.name()}"for i in range(1,101)]
b = []  #定义空列表
for s in range(1, len(a) + 1):  #我们根据a例表的长度 +1,因为从1开始的 但不包括1 所以+1
    age = random.randint(18, 35)
    RMB = random.randint(3000, 10000)
    b.append([f"员工号:{s}", f"年龄:{age}", RMB]) #将内容加入到列表b中
c = dict(zip(a,b))     #将a列表与b列表结合,并且a列表的值当key值,b列表当value值
print(c)

运行结果:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号