装一下
字典也是一个常见的数据类型,例如:
这样一个返回值,就可以看做一个标准的字典
其实处理起来也是比较简单的,下面开始看关于字典的内容
定义
字典是一个由键值对(key,value)组成、由冒号“:”分隔,存储在大括号“{}”中的数据类型。
其中键必须是唯一不重复的,而值可以相同
当然,字典在创建时,如果键相同,出现提示“字典包含重复键”,如下:
键也是不能变化的,所以键可以是数字、字符串或者元组,而不能是列表
字典是无序的,不能通过索引取值,只能通过key取值,如:
这种写法会被认为是取字典中,key是0的那个值,由于字典中并没有这个key,报错
value可以是任意类型,甚至可以是自定义类型
创建字典
创建字典的方式有以下几种:
其中是字典的一个内置方法,后面再说
访问字典内的值
访问单个元素
上边说过,字典是无序的,访问字典的值只能够通过key,例如:
运行一下
访问字典的值,需要将字典的key写在方括号中,需要注意key的数据类型,不能写错
字典dict1中key:“b”,对应的值是2,而key:“e” 并不在字典dict1中,所以出现报错,这个上边见过
遍历字典里的值
运行结果:
更新字典、添加值
更新字典
字典中存在对应key,给当前key重新赋值,便能更新字典里的对应值
将dict[“a”]重新赋值(100),然后打印字典,运行结果:
这样就更新了字典
添加值
字典中部队在对应的key,直接给新增key赋值,就能给字典新增一个键值对
由于“f”并不是dict中的key,所以给key赋值,会添加到字典中
运行结果:
添加字典
除了向字典中添加值外,还可以将一个字典并入另一个字典
运行结果:
复制字典
将字典直接赋值给一个变量
这种复制方式复制的dict2,与dict1的id是一样的,说明他们其实用的是同一个内存地址存的值,而当dict1中的值发生变化时,对应内存的值变了,自然dict2的值也变了
使用内置函数复制
.copy()方法复制的字典,是将内存中存的字典复制了一份放到了另一个内存地址,新的字典引用新的内存地址。
如果被复制的字典中包含子对象,子对象的引用地址仍相同。子对象改变,仍会同时影响两个字典
以下结果,通过对象的ID能发现引用情况:
删除元素
删除单一元素
删除了字典中key是“a”的键值对,所以结果:
清空字典
这是字典的一个方法,清空的是字典内的所有内容,所以结果:
删除字典
del字典操作,将对应字典从内存中删除了,所以在打印的时候没有dict1,会导致报错如下
字典的内置函数
len(dict)
这个函数计算字典中的key数量,运行结果:
str(dict)
将字典转换成字符串,这样可以直接打印,运行结果:
字典的内置方法
.clear()
上边说过,清除字典内所有元素
.copy()
浅复制一个字典,在复制字典时介绍过,基本上没有其他知识点了
.fromkeys(seq,val =None)
该来的总会来,之前犯懒不想写的现在也要介绍了
该方法会创建并返回一个新的字典,以seq中的元素作为新字典的键,val作为新字典的值,而默认值为None
举几个例子一看就能明白了:
无论是空字典还是有内容的字典,在使用之后都会生成一个新的字典。前三个分别用了列表、元组、字符串作为key,0作为值, 第四个未指定value,默认value为None,并且在运行后,都生成了新的字典,运行结果:
这里有个需要注意的点,虽然.fromkeys()是内置方法,但并不改变当前字典,只是新建字典
来看一个例子:
在“对dict1操作”后,打印dict1,发现dict1仍然与之前一样,没有任何变化。然后打印两个字典的id,可以看出,已经是不同的两个字典
.get(key,default = None)
这个方法也能够返回字典里的值,当字典里面有“key”,返回对应value;字典里面没有“key”,返回定义的值(未定义为None)
运行结果:
.setdefault(key,default = None)
这个方法也能够返回字典里的值,当字典里面有“key”,返回对应value;字典里面没有“key”,插入对应的key和value(未定义值为None)
存在”a”、”b”,返回对应字典里面的值
不存在”n”,且未定义值,将key → “n”、value→None
不存在“m”,且定义了值,将(“m”,”hehe”)插入字典
key in dict
如果存在,返回True;如果不存在,返回False
如果不存在,返回True;如果存在,返回False
运行结果:
.items()
返回可遍历的类型
遍历字典:
运行结果:
可以发现,遍历的时候 返回的是key、value组成的元组
.keys()
返回由组成的类型数据,可直接转换成列表。
运行结果:
.values()
返回由组成的类型数据,可直接转换成列表。
运行结果:
.update()
上边见过,现在看一种情况,如果添加的字典中的key与原字典中的key存在相同的,则更新对应key的值
运行结果:
.pop(key[,default])
返回被删除的值,如果字典中没有对应的key,则返回定义的值,未定义值是会报错~报错报错~
运行结果:
.popitem()
随机返回并删除字典中的一个键值对
代码中将循环次数加一,会超出字典元素数量,所以字典内的元素会先被全部删除,之后再次调用方法,这时由于字典已经是空的,出现报错。
运行结果:
宝爷镇楼~
领取专属 10元无门槛券
私享最新 技术干货