前面,我们学习了两个序列,list和tuple,是存储不同类型数据的容器。
对列表和元组不清楚的朋友可以了解一下这两篇文章:
5.Python3基础:列表列表
6.Python3示例教程:tuple Tuple
今天,我们学习另一种容器类型:dictionary dict,它可以存储任何类型的对象。
Dict dictionary定义其元素是“键-值对”的形式,用大括号{}包裹,key key与value value之间用冒号隔开;“键-值对”用逗号分隔,也就是元素用逗号分隔,和list、tuple一样。
与值有映射关系,格式如下:
创建字典,实例代码:
字典键的两个特征:
1)Key key在字典中是唯一的,同一个Key Key不允许出现两次。
key key的类型必须是不可变的,如数字、字符串、元组等。
对应于该键的value值可以是任何数据类型。
我们可以通过setdefault方法为value设置默认值,比如:
dict _ org . set默认
如何获取字典dict的值,示例代码:
注意,当访问一个元素时,如果键不存在,将会报告一个KeyError异常。
通过dict.get方法获取指定key key的值,示例代码如下:
注意:如果指定的key key不存在,需要指定一个默认值,否则会报错。如果key key存在,而值不存在,则返回默认值。
如何更新字典,示例代码:
注意上面的' tel ',它是一个不存在的键,在被赋值为=后,它将作为一个新元素被添加到字典中
如果此“tel”键已经存在,则只有在用=赋值后才能修改它。
总结一下:当=用于赋值时,如果存在就修改键,不存在就添加;
我们也可以使用dict.update方法来更新字典dict。示例代码是:
我们发现在两本词典中都有一个同名的关键字“year”。update方法将删除重复项,然后将dict2中的内容更新到dict1,以确保字典中的key key是唯一的。
如何删除字典对象,示例代码:
Dict.pop会返回删除的值,字典本身有变化;
如果删除一个不存在的键,必须指定默认键,否则会报告错误,比如dict_org.pop
您还可以使用熟悉的del语句删除元素和字典对象。示例代码:
注意:del语句可以删除字典中的单个元素,dict.clear方法是清除空字典dict中的所有元素。
注意:del语句可以删除整个dictionary对象。删除后,dict_org字典对象将不存在,再次访问会报错。
类型字符串转换,实例代码:
若要确定key key是否已存储,请在运算符中使用in或not。示例代码:
几种常用的词典方法
其实之前也用过一些字典的方法。下面再补充几个:
Dict.items返回一个迭代对象,将k:v的键值对转换成元组,并作为链表的元素存储。结果类似于“列表的嵌套元组”。示例代码是:
我们可以通过遍历条目把字典dict编译成一个新的list,相当于list方法的实现过程。代码如下:
提取字典中的所有键:keys方法返回一个iterable对象,该对象相当于字典的键集,可以使用list将其转换为列表。示例代码:
提取字典中的所有值:values方法返回一个迭代对象,相当于字典的值集。可以使用list将其转换为列表。示例代码是:
创建dictionary,dict.fromkeys,使用seq中的元素作为dictionary元素的键。
下面重点介绍字典的浅层拷贝和深层拷贝,以及与直接赋值的区别;
直接赋值:它实际上是对一个对象的引用。
浅层复制):复制父对象,但不复制对象的内部子对象。
Deepcopy):是复制模块的DeepCopy方法,完全复制父对象及其子对象。
我们先来看看直接赋值和浅拷贝:
再来看深抄。我们需要导入复制模块:
总截面:
等号=是赋值引用,A和B其实是同一个引用,反过来指向对象obj。
浅拷贝后,虽然dict_a和dict_b是两个独立的对象,也就是两个引用,依次指向同一个对象obj。只要其中一个更新,另一个也会更新。
深度复制后,dict_a和dict_b是两个完全独立的对象,完全复制父对象及其子对象。也就是说,每个引用不再指向同一个对象,而是有自己独立的指向对象,所以深度复制后修改字典互不影响。
复制模块还有一个浅层复制方法copy.copy,可以自己试试。复制模块所针对的所有python对象的副本;
总结一下:等号=赋值和浅拷贝之后,指向没有变;深度复制后,指向独立。
好吧!Python数据类型的字典dict在这里分享。如有疑问,请在评论区留言,我会及时回复。谢谢!
【极客干货】从事IT行业十余年。在移动互联网开发、J2EE企业开发、IOT物联网、AI人工智能等方面积累了一定的技能。精通使用C/C++、Java、Python等编程语言。我从2009年开始接触Python,之后我会在空业余时间系统的和大家分享我熟悉的技术干货。也许我的分享会让你少走弯路。如果你觉得还可以,请多多关注,评论,转发。非常感谢!