python 如何修改字典的key值_Python3 自学第7天:字典dict

6581a74f2972f0589119f99730b16808.png

前面我们了解了列表list和元组tuple两个序列,是存储不同类型数据的容器。

对列表和元组不清楚的朋友可以了解下这两篇文章:

《Python3 自学第5天:列表list》

《Python3 自学第6天:元组tuple》

今天我们了解下另外一种容器类型:字典dict它可以存储任意类型的对象

字典dict定义,它里面的元素是“健值对”形式,包裹在花括号{ }里面,用冒号(:)将键key与值value隔开;“键值对”之间用逗号(,)分开,也就是元素之间用逗号(,)分开,这点和list,tuple是一样的。

key与value 之间是一种映射关系,格式如下:

79ffe0c630cd506094bce0539a1d59f2.png

创建字典,实例代码:

7256853778cb13743d83eb1c63cb9aa9.png

字典键key的两个特性:

1)键key在字典里是唯一的,不允许同一个键Key出现两次。

2)键key的类型必须是不可变的,如数字,字符串,元组等;

键key对应的值value可以是任何数据类型。

我们可以通过setdefault()方法为value设置默认值,如:

dict_org.setdefault('sex', 'man')

如何获取字典dict的值,实例代码:

1c8c55422ccdcde7d316ef749b9f16f2.png

注意了,访问元素时如果key不存在会报KeyError异常。

用dict.get(key)方法获取指定键key的值value,实例代码如下:

7b3421ae42b02c80406d176df1b78e52.png

注意:如果指定的键key不存在(比如上面的'sex')是需要指定一个默认值的,否则会报错的。如果键key存在,值不存在,返回默认值。

如何来更新字典呢,实例代码:

4411e6ef48a799172b8d4a8464602edc.png

注意上面的'tel',它是一个不存在的键key,通过 = 赋值后会作为新元素被添加到字典里面;

如果这个'tel'键key已经存在,通过 = 赋值后只会做修改操作。

总结一下:用 = 赋值时,key存在就修改,不存在就添加;

我们也可以用dict.update()方法来更新字典dict,实例代码:

9aef71acb69d701ae2991824d265c3a0.png

我们发现两个字典里都有一个同名键'year',update()方法会去重,再把dict2里的内容更新到dict1里,以确保字典里的键key是唯一的。

如何来删除字典对象及呢,实例代码:

fb6c033e33157a1dac0777ceed4e7672.png

dict.pop(key)会返回被删除的值,同时字典本身也变更了;

如果删除一个不存在的key,是要指定默认值key的,否则会报错,如:dict_org.pop('tel','phone')

还可以用我们熟悉的del语句删除元素和字典对象,实例代码:

44e37c586f1ec04cb8f5a83f2d832eae.png

注意:del语句可以删除字典里的单个元素,dict.clear()方法是清空字典dict里面的所有元素。

63276bb7312bd1fd89501683340bb328.png

注意:del语句可以删除整个字典对象,删除以后dict_org字典对象就不存在了,再访问就会报错。

类型转换 str(dict),实例代码:

1318450dbfa3da7c8d2ded7517141206.png

判断键key是否存,用 in 或 not in 操作符,实例代码:

9bc14e3e07aa2b00efdb8e8b5b458d5d.png

常用的几个字典方法

其实前面已经用过一些字典方法了,下面再补充几个:

dict.items()返回一个可迭代对象,它把k:v健值对转换成元组存为列表的元素,其结果类似“列表嵌套元组”,实例代码:

6d0a3f2adc1f920d66376069361f9e09.png

我们可以通过遍历items()把字典dict编排成一个新列表list,相当于list(dict)方法的实现过程,代码如下:

da9e371f402c0ed9507273c1df7fb173.png

提取字典里的所有键:keys() 方法返回一个可迭代对象,相当于字典的key集合,可以使用 list() 来转换为列表,实例代码:

1afc1b4d680f212d50edda79264e8974.png

提取字典里的所有值:values() 方法返回一个可迭代对象,相当于字典的value集合,可以使用 list() 来转换为列表,实例代码:

d1b5e34b5f870c55f860648111d73e7c.png

创建字典,dict.fromkeys(seq,v),将seq中的元素做为字典元素的key。

c9d3e7b395b07c8d5efffe841f1d4043.png

下面重点说下字典的浅拷贝和深拷贝,以及与直接赋值的区别;

直接赋值:其实就是对象的引用(对象的一个标签名,别名而已)。

浅拷贝(dict.copy()):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(copy.deepcopy()): 它是copy模块的deepcopy方法,完全拷贝了父对象及其子对象。

先来看下直接赋值和浅拷贝:

1d91927772b2db7b63fd9612e613f3d8.png

我们再看看深拷贝,需要导入copy模块:

225a82f2226bd617049a6c5eab41c9e9.png

总节一下:

用等号 = 是赋值引用,a,b其实是同一条引用,这个引用又指向了对象obj

浅拷贝后虽然dict_a,dict_b是两个独立对象,即两个引用,这两个引用又指向同一个对象obj。只要更新其中一个,另外一个也会跟更新。

深拷贝后dict_a,dict_b是两个完全独立对象,它俩完全拷贝了父对象及其子对象;也就是说每个引用不再指向同一个对象,而是各自有了独立的指向对象,所以深拷贝后修改字典是互不影响的。

copy模块也有个浅拷贝方法copy.copy(obj),大家可以自己试下;copy模块针对的所有python对象的拷贝;

总结一下: 等号=赋值和浅拷贝后,指向没变;深拷贝后,指向独立了。

OK!Python数据类型的字典dict就分享到这里,如果您有什么问题,请在评论区留言,我会及时回复,感谢!

【极客干货】从事IT行业十余年,在移动互联网开发,J2EE企业级开发,IOT物联网,AI人工智能等方面有点技术积累,熟练使用C/C++,Java,Python等编程语言。从2009年开始接触Python,后续借空闲时间将个人熟悉的技术干货系统性分享给大家,也许我的分享会让你少走一些弯路,如果您觉得还可以,请多多关注,评论和转发,非常感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值