当前位置: 首页 > 后端技术 > Python

【经验分享】Python经典操作:合并字典的七种方法

时间:2023-03-26 16:36:09 Python

Python语言有很多(而且越来越多)的高级特性,深受Python爱好者的喜爱。在这些人眼里,能写出普通开发者看不懂的高级功能的,就是高手,就是神。但是你要知道,在团队合作中,炫技是大忌。你为什么这么说?说说我的看法:代码越简洁,逻辑越清晰,越不容易出错;在团队合作中,您的代码不仅由您维护,减少其他人阅读/理解代码逻辑的成本是一个好主意。简单的代码只会使用最基本的语法糖,复杂的高级特性会有更多的依赖(比如语言版本)在这篇文章中,我将总结和盘点我所看到的技巧。在这里,如果你是Python爱好者,你可以学到一些很酷的代码编写技巧。同时,阅读这些内容可能对你阅读别人的代码有帮助。1、最简单的就地更新字典对象有一个内置的update方法,用于将另一个字典更新到自己。>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>profile.update(ext_info)>>>print(profile){'name':'xiaoming','age':27,'gender':'male'}如果你想用更新,最简单最正宗的方法,但又不想自己更新,和To生成新对象,请使用深拷贝。>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>fromcopyimportdeepcopy>>>>>>full_profile=deepcopy(profile)>>>full_profile.update(ext_info)>>>>>>print(full_profile){'name':'xiaoming','age':27,'gender':'male'}>>>print(profile){"name":"xiaoming","age":27}2.先解包再合并字典用**解包字典,解包后用dict或{}合并。学习过程中有什么不懂的可以加我的python学习群。855408893群里有很好的学习视频教程、开发工具和电子书。跟大家分享一下目前python公司的人才需求以及如何从零开始学好python,学什么>>>profile={"name":"xiaoming","age":27}>>>ext_info={"性别":"男"}>>>>>>full_profile01={**profile,**ext_info}>>>print(full_profile01){'name':'xiaoming','age':27,'gender':'男'}>>>>>>full_profile02=dict(**profile,**ext_info)>>>print(full_profile02){'name':'xiaoming','age':27,'gender':'male'}如果你不知道dict(**profile,**ext_info)是干什么的,你可以等同于>>>dict((("name","xiaoming"),("age",27),("性别","男"))){'姓名':'小明','年龄':27,'性别':'男'}3.借助itertools,Python中有一个非常强大的内置模块,专门用于操作可迭代对象。恰好我们的字典也是可迭代对象,所以很自然的想到可以使用itertools.chain()函数将多个字典(可迭代对象)拼接成一个更大的可迭代对象,然后用dict转换成一本字典。>>>importitertools>>>>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>>>>>dict(itertools.chain(profile.items(),ext_info.items())){'name':'xiaoming','age':27,'gender':'male'}4.如果可以使用ChainMap引入一个辅助包,那么我再提一个,ChainMap也可以达到和itertools一样的效果。>>>fromcollectionsimportChainMap>>>>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>dict(ChainMap(profile,ext_info)){'name':'xiaoming','age':27,'gender':'male'}使用ChainMap需要注意的一点是,当字典之间存在重复键时,只取第一个值,后面的键值不会更新前面的(使用itertools不会有这个问题)。>>>fromcollectionsimportChainMap>>>>>>profile={"name":"xiaoming","age":27}>>>ext_info={"age":30}>>>dict(ChainMap(profile,ext_info)){'name':'xiaoming','age':27}5.使用dict.items()合并在Python3.9之前,实际上有|运算符,但通常用于集合(set)取联合。利用这一点,它也可以用于合并字典,但它要绕一圈,有点难以理解。你必须使用items方法将dict转换为dict_items,然后将两个dict_items取并,最后使用dict函数将其转换为字典。>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>full_profile=dict(profile.items()|ext_info.items())>>>full_profile{'gender':'male','age':27,'name':'xiaoming'}当然,如果你觉得这样太麻烦,你也可以简单地使用它直接将list函数再次合并(Python3.x为例)。学习过程中有什么不懂的可以加我的python学习群。855408893群里有很好的学习视频教程、开发工具和电子书。跟大家分享一下目前python公司的人才需求以及如何从零开始学好python,学什么>>>profile={"name":"xiaoming","age":27}>>>ext_info={"性别":"男"}>>>>>>dict(list(profile.items())+list(ext_info.items())){'name':'xiaoming','age':27,'gender':'male'}如果是Python2.x下,可以直接省略list函数。>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>dict(profile.items()+ext_info.items()){'姓名':'小明','年龄':27,'性别':'男'}6.最酷的字典分析Python有一套非常Pythonic的生成列表、集合和字典的写法。那就是列表推导、集合推导和字典推导,这些通常是Python爱好者的最爱,那么今天的话题:字典合并,字典推导还能做到吗?当然,具体的示例代码如下:>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>>{k:vfordin[profile,ext_info]fork,vind.items()}{'name':'xiaoming','age':27,'gender':'male'}7.Python3.9新特性在二月份发布的Python3.9.04a版本中,新增了一个引人注目的运算符运算符:|,PEP584称之为联合运算符(UnionOperator),可用于合并多个字典。>>>profile={"name":"xiaoming","age":27}>>>ext_info={"gender":"male"}>>>>>>profile|ext_info{'姓名':'小明'','年龄':27,'性别':'男'}>>>>>>>ext_info|profile{'性别':'男','姓名':'小明','年龄':27}>>>>>>除了|operator,还有一个operator|=,类似于in-placeupdate。>>>ext_info|=profile>>>ext_info{'性别':'男','姓名':'小明','年龄':27}>>>>>>>>>profile|=ext_info>>>profile{'name':'xiaoming','age':27,'gender':'male'}看到这里,你的姿势抬高了吗?学了这么久的Python,没想到还有这么多合并字典的方法。这篇文章的目的不是让你掌握所有的7种合并词典的方法。在实际工作中,你只需要选择最方便的方式即可,但是在协同工作中,或者在阅读别人的代码时,难免会遇到各种各样的写法。这时候你可以下意识的知道这是一个合并字典的操作,那么这篇文章就有意义了。为解决初学者学习难点,特设立Python学习按钮QUN:⑧⑤⑤-④零⑧-⑧⑧③从零基础到项目实战教程、开发工具和Python各领域电子书。