分享好友 站长动态首页 网站导航

数据字典实例

网友发布 2022-07-29 11:55 · 头闻号编程技术

前面,我们学习了两个序列,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,之后我会在空业余时间系统的和大家分享我熟悉的技术干货。也许我的分享会让你少走弯路。如果你觉得还可以,请多多关注,评论,转发。非常感谢!

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

评论

0

收藏

点赞