本章字典篇,比较的重要,所以有比较多的练习小实战,一起来看看吧。
字典
什么是字典:
字典:是一系列的键值对,每一个键都会有对应的一个值关联,它们可以是数字 ,字符串,列表以及字典本身。用{}来表示。
特点:
1. 查找和插入的速度极快,不会随着key的增加而增加;
2. 需要占用大量的内存,内存浪费多。
# 创建一个字典 airship = {'color':'yellow','year':'100','qingan':'清安'}
这个就是字典,'color'、'year'、'qingan'就是键,'yellow'、100、清安就是值,我们创建的这个飞船字典,还可以对它进行访问哦!
airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'} print(airship['qingan']+"的飞船颜色是"+airship['color'] +"今年"+ airship['year']+"岁了")
注意:我们可以通过访问飞船的键来获取它的值。
get方法
另外介绍一种获取值得方法.get()
# 创建一个字典 airship = {'color':'yellow','year':'100','qingan':'清安'} i = airship.get('color') print(i) print(a.get('yearr','不存在这个键')) # yellow # 不存在这个键
小实战
l1 = {'name': '清安', 'age': 18, 'sex': '男'} l2 = {'name':'菜狗','age':20,'sex':'女'} l3 = {'name':'菜鸡','age':22,'sex':'男'} list_ = [l1,l2,l3] for i in range(len(list_)): print(list_[i].get('name')) # 清安 # 菜狗 # 菜鸡
此处结合了前面所学的列表知识,一并做了一个练习。将字典嵌入到列表中,用上for循环来循环list_列表的长度,也就是len函数。用列表索引取值的方式获取到i,i来对len的长度进行循环,list_中有三个变量,所以长度为3,索引从0开始,再用get获取到指定的键,并进行值的打印。
zip函数创建字典
zip函数前面列表处介绍过的,此处再来运用一番:
a = ['name','age','sex'] b = ['清安',18,'男'] c = dict(zip(a,b)) print(c) # {'name': '清安', 'age': 18, 'sex': '男'}
可以说是一一对应的生成了字典。
fromkeys函数
d = dict.fromkeys(['name','age','sex']) print(d) # {'name': None, 'age': None, 'sex': None}
注意了,None是一个值!!!
添加键值对
# 创建一个字典 airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'} airship['money'] = 100000 airship['driving_speed'] = 2000 print(airship)
这里我们添加了两个新的键与值。键为'money'、'driving_speed',值为10000,2000,中间用=号连接起来。添加键值对的格式就是这样的。
小伙伴们也可以先创建一个空字典,再进行添加键值对哦,格式:airship = {},就是花括号里面什么也不写 ,就是空字典了。
删除键值对
airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'} del airship['year'] print(airship)
我们也是使用del来进行删除,关于这个方法,清安在前面讲过哦,忘记了的赶紧去复习一下。
另外pop也是可以的pop(key)也是可以删除的哦。
修改键值对
airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'} airship['color'] = 'red' print(airship)
修改字典中的值,我们直接指定键就可以了,像小北这样,指定color你可以将颜色改成任何一种颜色哦。
弹出
airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'} # 指定弹出键所对应的值 a = airship.pop('color') print(a) # yellow
还有一种方法是popitem
airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'} a = airship.popitem() print(a,airship) airship.popitem() print(airship) # ('qingan', '清安') # {'color': 'yellow', 'year': '100'}
这里你需要注意的是如果你使用了方法popitem后,你用变量接收了它,那么打印出来的只会是元组。如果直接打印airship,就可以看出弹出的是字典中最后那一个键值对。
实战综合运用
当你想写很多的键值对到字典中时,你可以:
language = { 'tom' : 'python', 'tim' : 'java', 'zhangsan' : 'c', 'lisi' : 'php', 'wangwu' : 'html', } print(language)
实战一
当你想输出王五喜欢的课程,并且首字母要求大写时,你可以:
language = { 'tom' : 'python', 'tim' : 'java', 'zhangsan' : 'c', 'lisi' : 'php', 'wangwu' : 'html', } favorite = language['wangwu'].title() print(favorite) # Html
for循环
我们接下来结合前面两章所学,运用到字典上来,看例子:
language = { 'tom' : 'python', 'tim' : 'java', 'zhangsan' : 'c', 'lisi' : 'php', 'wangwu' : 'html', } for key,values in language.items(): print(f"KEY:{key} VALUES:{values}") # KEY:tom VALUES:python # KEY:tim VALUES:java # KEY:zhangsan VALUES:c # KEY:lisi VALUES:php # KEY:wangwu VALUES:html
这里我们用到了for循环,这里的意思是循环打印出language的键与值,我们自己定义的key和values一个代表键一个代表值,这两个小伙伴们想怎么定义就这么定义,但是定义变量的注意事项要记得哦,key是键,values是值,程序上的.items(),这是 一个方法,它会返回一个键值对列表,如果不加就会报错哦。
遍历key值
language = { 'tom' : 'python', 'tim' : 'java', 'zhangsan' : 'c', 'lisi' : 'php', 'wangwu' : 'html', } for key in language.keys(): print(f"KEY:{key}")
遍历key值为什么用的是keys?key值是一种说法,字典是键与值一起的组合,所以这里取名为key值。keys是方法,用来取值的。
实战2
language = { 'tom': 'python', 'tim': 'java', 'zhangsan': 'c', 'lisi': 'php', 'wangwu': 'html', } friend = ['lisi', 'liehuang', 'wangwu'] # 用变量循环language字典中的键 for key in language.keys(): print(key.title()) # 判断key是否再friend列表中 if key in friend: # 定义一个变量来接收存在的键 friends = language[key].title() print(f"{key.title()}, I love {friends}")
遍历所有的值
language = { 'tom': 'python', 'tim': 'java', 'zhangsan': 'c', 'lisi': 'php', 'wangwu': 'php', } for value in language.values(): print(value)
注意了,这里输出的结果是有重复的哦。怎么样去重呢?看下面
去重
那么我们要去重又要输出值怎么办呢?我们可以用set方法
language = { 'tom': 'python', 'tim': 'java', 'zhangsan': 'c', 'lisi': 'php', 'wangwu': 'php', } for value in set(language.values()): print(value)
列表字典
dictt = {'color': 'red', 'year': 1} dictt1 = {'color': 'yellow', 'year': 2} dictt2 = {'color': 'blue', 'year': 3} all_dictt = [dictt, dictt1, dictt2] print(all_dictt) for all_dictts in all_dictt: print(all_dictts) # [{'color': 'red', 'year': 1}, {'color': 'yellow', 'year': 2}, {'color': 'blue', 'year': 3}] # {'color': 'red', 'year': 1} # {'color': 'yellow', 'year': 2} # {'color': 'blue', 'year': 3}
我们创建三个字典,再将字典放进一个列表中,再进行循环打印,并输出,也许小伙伴会觉得复杂,此处我们还是得学习的,后面的selenium以及appium亦或者接口自动化需要用到读取表格哦传输值哦。
实战三
我们将上述dictt字典放入一个空的列表,并让这个字典连续打印十次
lists = [] # 循环十次 for list_2 in range(1, 11): dictt = {'color': 'red', 'year': 1} # 将字典添加到列表中 lists.append(dictt) # 定义一个变量循环遍历列表 for list_3 in lists: print(list_3) print(f"一共创建了:{list_2}个字典")
结果行数太多了就不写出来了,可以自己试试效果如何。
也可以对其进行一定的修改,比如修改前三个的颜色:
lists = [] # 循环十次 for list_2 in range(1, 11): dictt = {'color': 'red', 'year': 1} # 将字典添加到列表中 lists.append(dictt) # 使用一个新的循环去循环列表的前三个字典 for lists_1 in lists[:3]: # 如果color等于red,则将color进行更改,year也可以进行更改 if lists_1['color'] == 'red': lists_1['color'] = 'green' lists_1['year'] = 2 # 定义一个变量循环遍历列表,显示前四个 for list_3 in lists[:4]: print(list_3) print(f"一共创建了:{list_2}个字典")
如果你觉得为什么判定red不判定year就可以更改,因为他们再同一个字典中,不放心的小伙伴可以用if对year多进行一次判断哦。
** 字典中可以储存列表,看下面的操作你就明白了:**
pak = { 'dog': 'yellow', 'birds': ['red', 'blue'], } print(f"动物园里有:{pak['dog']}颜色的狗") for paks in pak['birds']: print("鸟的颜色有:\t" + paks + "的")
这里我们在字典中加入了列表,'birds'的值为一个列表,我们想要输出对应的值,就必须使用for循环才能一一输出,看示例,我们定义一个变量循环遍历pak字典中'birds'键所对应的值,并打印这个变量,就能得到我们想要的值了。
实战四
pak = { 'dog': ['yellow', 'black'], 'birds': ['red', 'blue'], 'cat': ['white', 'orange'], } for animals,color in pak.items(): print(f"{animals}颜色都有:") for color_num in color: print(color_num.title()) # dog颜色都有:Yellow Black # birds颜色都有:Red Blue # cat颜色都有:White Orange
这里我们使用了多个列表值,并用for循环进行遍历所有的颜色!你们输出的格式不是我注释的那个样子,这里我是修改了格式,所以不必纠结。
字典存储字典
number = { '张三': { 'first_name': '张', 'last_name': '三', 'height': 180, }, '李四': { 'first_name': '李', 'last_name': '四', 'height': 170, }, } for usename, usenames in number.items(): print(f"{usenames['first_name']}{usenames['last_name']}{usenames['height']}") #第二种写法 number = { '张三': { 'first_name': '张', 'last_name': '三', 'height': 180, }, '李四': { 'first_name': '李', 'last_name': '四', 'height': 170, }, } for usename, usenames in number.items(): full_name = f"{usenames['first_name']}{usenames['last_name']}" location = usenames['height'] print(f"{full_name}、身高:{location}")
这两种写法最后的结果都是一样的,写法上稍微有一点点不同,可能第一种小伙伴更容易理解。
第二种只是额外给了一个变量而已,而第一种方法直接调用了定义的变量指定内部字典纸进行输出。很多小伙伴肯定会问,外部字典键为什么不输出,要想输出,直接将usename加载print里面就好了,这里只是便于观看而已。
实战五
name_user = {} # i = True while True: # while i # 提示输入名称 name = input("请输入课程:") teacher = input("请输入老师名称:") # 写入字典 name_user[name] = teacher last = input("还有吗?y/n\t") #进行输入判断,如果为no则结束循环 if last == 'no': break # i = False # 用循环输出键与值 for names, value in name_user.items(): print(f"我得课程是{name},我的老师是{teacher}")
这里可以自动填入键值对,所以还是值得大家好好看看的。