当前位置: 首页 > 科技观察

迷人的学霸操作!教你Python合并字典的多种解题方法

时间:2023-03-22 14:54:38 科技观察

本文转载自公众号《阅读核心》(ID:AI_Discovery)Python3.9目前正处于开发初期,但有很多令人惊喜的新功能特征。其中之一是颠覆性的,它可以让处理Python字典时编写的代码更具可读性和更紧凑。第一个稳定版本应该会在2020年10月到来。在正式会面之前,有一些问题需要澄清。Python字典字典是Python中独特的数据结构。它包含多个元素,每个元素是一个键值对。例如,初始化包含两个元素的字典d1。键“name”的值为“Tom”,键“age”的值为20。d1={'name':'Tom','age':20}这个字典存储了20岁的Tom的信息老的。假设出于某种原因我们收集了更多关于Tom的信息,例如他的GPA和婚姻状况。现在可以创建另一个名为d2的字典。d2={'gpa':4.0,'is_single':True}现在我想将这两个词典合并在一起,因为它们包含关于同一个人(Tom)的不同信息。那么问题来了,如何在Python中合并两个字典呢?1、笨方法可以在dict_name[key]=value语句中使用赋值运算符“=”向已有字典中插入新元素。d1={'name':'Tom','age':20}d1['sex']='Male'#d1=={'name':'Tom','age':20,'sex':'Male'}因此,在不使用任何特定字典方法的情况下,首先想到的方法是编写一个for循环,使用iterable.items()遍历每个键值对,然后将键值对插入到新的词典知道。d1={'name':'Tom','age':20}d2={'gpa':4.0,'is_single':True}dnew=dict()forkey,valueind1.items():dnew[key]=valueforkey,valueind2.items():dnew[key]=value#dnew=={'name':'Tom','age':20,'gpa':4.0,'is_single':True}然而,合并后的字典应该非常简单,应该在一行代码中实现。2.默认方法实际上,有一个内置方法用另一个字典d2“更新”一个字典d1。dnew=d1.copy()dnew.update(d2)的一个缺点是.update()方法会就地修改字典。您需要先复制d1以创建新字典dnew。这种“内置”方法不能方便地合并字典。能否合并成一行代码?是的!3.“干净”的方法Python从3.5+版本开始支持字典解压**。可以通过从两个词典中解包元素来创建一个新的“合并”词典。dnew={**d1,**d2}这种解压方式成为Python3.5+实际使用的合并字典的方式。然而,这种语法对某些人来说可能看起来不雅观,而且对大多数人来说显然不直观。当你第一次看到它时,你能猜出它的意思吗?还有另一种巧妙的方法可以用一行代码合并字典。它看起来也不直观。dnew=dict(d1,**d2)4.Python3.9中的clean方法Python3.9引入了一个新的clean(!)方法来使用联合运算符“|”合并字典。非常简洁。dnew=d1|d2#dnew=={'name':'Tom','age':20,'gpa':4.0,'is_single':True}这个联合运算符在Python中其实并不新鲜。它可用于“合并”两个集合。集合是无序和无索引的集合,也包含在花括号中。a={1,2,3}b={3,4,5}print(a|b)#{1,2,3,4,5}扩展赋值对于两个列表或两个值a和b,a+=b是a=a+b的简写。这种扩大赋值行为也适用于字典联合运算符。这意味着d1|=d2等于d1=d1|d2。请注意,集合是无序的,而字典是按顺序插入的(Python3.6),即字典会记住插入元素的顺序。这意味着字典并集是不可交换的。d1|d2和d2|d1将导致合并字典中元素的不同顺序。不满足于仅仅得到答案,“学霸”追求最优解。你学过这个话题吗?