热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3字典合并_Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现

处于测试阶段的Python 3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!

Python版本

你现在使用哪种版本的Python?3.7分?3.5分?还是2.7?

Python 3.9现在正处于开发的alpha阶段,官方文档中已经提出了许多新特性!该版本已经在5月进入beta测试阶段,稳定版应该在10月发布。其中的一个新功能涉及了字典,让我们看看新的字典将会给我们带来哪些新体验。

Python字典

字典是Python中非常独特的数据结构。它包含多个元素,每个元素都是一个键值对。例如,让我们用两个元素初始化字典d1。键“name”的值为“Tom”,而键“age”的值为20。

d1 = {'name': 'Tom', 'age': 20}

在这里,我们用字典d1储存了年龄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()遍历每个键值对,然后将该对插入到新的dictionary dnew中。

d1 = {'name': 'Tom', 'age': 20}

d2 = {'gpa': 4.0, 'is_single': True}

dnew = dict()

for key, value in d1.items():

dnew[key] = value

for key, value in d2.items():

dnew[key] = value

# dnew == {'name': 'Tom', 'age': 20, 'gpa': 4.0, 'is_single': True}

尽管如此,合并字典应该是非常简单和直接的事情,应该在一行代码中完成。

我们应该能做得更好。

2.默认的做法

实际上,有一个内置方法可以将字典d1与另一个字典d2“更新”。

dnew = d1.copy()

dnew.update(d2)

上述代码存在一个缺点,那就是.update()会就地修改字典。你需要先复制d1来创建一个新的字典dnew。这种“内置”方法破坏了使用方便的内置方法合并词典的目的。

我们能在一行代码中合并吗?可以!

3.看起来很“整洁”的方法

Python支持版本3.5+起的字典解压**。 你可以通过解压缩两个字典中的元素来创建新的“合并”字典。

dnew = {**d1, **d2}

这种解包方法成为合并python3.5+中字典的实际方法。然而,这种语法在你们中的一些人看来可能很难看,而且对我们大多数人来说肯定不是直观的。在第一次看到这行代码时,你能猜出它是什么意思吗?

此外,还有另一种看起来也不直观的简单方法可以在一行中实现字典合并。

dnew = dict(d1, **d2)

Python3.9版本中干净利落的合并方式

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。

注意事项

集合是无序的,字典是按顺序插入的(来自Python 3.6)。换句话说,字典会记住插入项目的顺序。

这意味着字典并集不是可交换的,d1 | d2 和 d2 | d1 将导致合并的词典具有不同的项目顺序。

--END--

喜欢本文的同学,记得转发+点赞哈~

也可以关注我们的公众号:为AI呐喊(weainahan)



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
小石子Sandra
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有