【Python】 深入了解 Python 字典的 | 更新操作


我白天是个 搞笑废物
表演不在乎
夜晚变成 忧伤怪物
撕扯着孤独
我曾经是个 感性动物
小心地感触
现在变成 无关人物
                     🎵
张碧晨/王赫野《何物》


Python 3.9 引入了一种新的字典更新操作,即使用 | 运算符合并字典。这种方式不仅简洁,而且非常直观。本文将深入探讨这种新特性,展示它的用法和优势。

什么是字典的 | 更新操作?

在 Python 3.9 之前,合并两个字典通常需要使用 update() 方法或解构语法。Python 3.9 引入了新的 | 运算符,使得合并字典变得更加简洁和直观。

基本用法

假设有两个字典 dict1 和 dict2,我们希望将它们合并。可以使用 | 运算符来实现这一点:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}merged_dict = dict1 | dict2
print(merged_dict)  # 输出: {'a': 1, 'b': 3, 'c': 4}

在这个示例中,dict1 和 dict2 被合并成了一个新的字典 merged_dict。如果两个字典中存在相同的键,那么 dict2 中的值会覆盖 dict1 中的值。

进阶用法

除了基本的合并操作,我们还可以利用 |= 运算符来原地更新字典:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}dict1 |= dict2
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

在这个示例中,dict1 被原地更新,即 dict1 中的内容被 dict2 的内容合并并覆盖。

与 update() 方法对比

在 Python 3.9 之前,合并字典主要使用 update() 方法:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}dict1.update(dict2)
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

虽然 update() 方法可以达到相同的效果,但 | 运算符提供了一种更简洁的写法,并且支持链式操作:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict3 = {'d': 5}merged_dict = dict1 | dict2 | dict3
print(merged_dict)  # 输出: {'a': 1, 'b': 3, 'c': 4, 'd': 5}

性能对比

在性能方面,| 运算符和 update() 方法在大多数情况下表现相似。但在需要链式合并多个字典时,| 运算符可能会更加高效,因为它可以避免创建多个中间字典。

import timeitdict1 = {i: i for i in range(1000)}
dict2 = {i: i + 1000 for i in range(1000, 2000)}# 使用 update 方法
def update_method():d = dict1.copy()d.update(dict2)return d# 使用 | 运算符
def pipe_operator():return dict1 | dict2print(timeit.timeit(update_method, number=10000))  # 使用 update 方法的时间
print(timeit.timeit(pipe_operator, number=10000))  # 使用 | 运算符的时间

适用场景

| 运算符特别适用于以下场景:

合并多个字典:可以简洁地合并多个字典而不需要创建中间变量。
字典推导:在字典推导中使用 | 运算符可以提高代码的可读性和简洁性。

总结

Python 3.9 引入的字典 | 更新操作为字典的合并提供了一种简洁、直观的方式。与传统的 update() 方法相比,它不仅代码更简洁,而且在某些场景下性能更佳。如果你正在使用 Python 3.9 或更高版本,强烈推荐使用这种新特性来处理字典的合并操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xshell公钥免密登录

设备:一台linux系统机器,一台windows系统机器 软件:xshell 要求:公钥免密登录 一、生成公钥、私钥 1、打开shell ; 点击工具 ; 新建用户生成密钥向导 2、生成密钥参数 密钥类型:RS…

element ui ts table重置排序

#日常# 今天带的实习生&#xff0c;在遇到开发过程中&#xff0c;遇到了element ui table 每次查询的时候都需要重置排序方式&#xff0c;而且多个排序是由前端排序。 <el-table :data"tableData" ref"restTable"> </<el-table> <script…

bi项目笔记

1.bi是什么 bi项目就是商业智能系统&#xff0c;也就是数据可视画、报表可视化系统&#xff0c;如下图的就是bi项目了 2.技术栈

Linux rsync文件同步工具

scp的不足 1. 性能问题 单线程传输 SCP只使用单线程进行传输&#xff0c;这意味着在传输大文件或大量小文件时&#xff0c;其传输速度和效率可能不如其他多线程工具。 无法压缩数据传输 SCP不支持内置的压缩机制&#xff0c;这在传输大文件时会导致带宽使用效率较低。 2.…

我花了5年时间训练自己这种能力,希望你也能成功

人生最重要的能力是日拱一卒&#xff0c;即每天做一点点对自己有利的事并持续足够长的时间。作者之前急于求成&#xff0c;减肥失败。同事通过每月改进一件小事成功减肥且知识储备丰富。作者受启发后&#xff0c;通过走楼梯、换代糖等小改变&#xff0c;用 4 年减了 40 斤&…

Hive的基本操作(创建与修改)

必备知识 数据类型 基本类型 类型写法字符char, varchar, string✔整数tinyint, smallint, int✔, bigint✔小数float, double, numeric(m,n), decimal(m,n)✔布尔值boolean✔时间date✔, timestamp✔ 复杂类型(集合类型) 1、数组&#xff1a;array<T> 面向用户提供…

从头开始搭建一套Elasticsearch集群

前言 刚开始使用ES接触的就是rpm或者是云上提供的ES服务&#xff0c;基本上开箱即用。特别是云上的ES服务&#xff0c;开局就是集群版本&#xff0c;提供的是优化后的参数配置、开箱即匹配访问鉴权及常用插件&#xff0c;如无特殊需要基本上屏蔽了所有细节&#xff0c;直接可投…

深入了解 MySQL 的 EXPLAIN 命令

一、什么是 EXPLAIN 命令&#xff1f; EXPLAIN 命令用于显示 MySQL 如何执行某个 SQL 语句&#xff0c;尤其是 SELECT 语句。通过 EXPLAIN 命令&#xff0c;可以看到查询在实际执行前的执行计划&#xff0c;这对于优化查询性能至关重要。 二、EXPLAIN 的基本用法 要使用 EXP…

如何禁用键盘上的特定键或快捷方式?这里有详细步骤

要禁用特定的键盘键或快捷键吗&#xff1f;微软官方应用程序Microsoft PowerToys使这项任务变得非常简单。以下是使用Microsoft PowerToys中的键盘管理器禁用特定键或快捷方式的快速指南。 如果你还没有安装Microsoft PowerToys 如果你的设备上没有安装Microsoft PowerToys&a…

springboot上传图片

前端的name的值必须要和后端的MultipartFile 形参名一致 存储本地

3.2、matlab单目相机标定原理、流程及实验

1、单目相机标定流程及步骤 单目相机标定是通过确定相机的内部和外部参数,以便准确地在图像空间和物体空间之间建立映射关系。下面是单目相机标定的流程及步骤: 搜集标定图像:使用不同角度、距离和姿态拍摄一组标定图像,并确保标定板(可以是棋盘格或者圆形标定板)完整可…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【匿名密钥证明(C/C++)】

匿名密钥证明(C/C) 在使用本功能时&#xff0c;需确保网络通畅。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 确定密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节&#xff1b;初始化参数集&#xff1a;通过[OH_Huk…

AcWing 667. 游戏时间

读取两个整数 A&#x1d434; 和 B&#x1d435;&#xff0c;表示游戏的开始时间和结束时间&#xff0c;以小时为单位。 然后请你计算游戏的持续时间&#xff0c;已知游戏可以在一天开始并在另一天结束&#xff0c;最长持续时间为 2424 小时。 如果 A&#x1d434; 与 B&…

css3 transform的旋转和位移制作太阳花

css3 transform 实例展示知识点rotate 旋转translate 位移transform: translate(300px,200px) rotate(90deg) 实例代码 实例展示 知识点 transform的两个属性 rotate 旋转 translate 位移 transform: translate(300px,200px) rotate(90deg) 实例代码 <!DOCTYPE html&g…

flask 定时任务(APScheduler)使用current_app app_context()上下文

前言: 描述&#xff1a;flask定时任务调用的方法中使用了current_app.logger.info()记录日志报错 报错代码 raise RuntimeError(unbound_message) from None RuntimeError: Working outside of application context.This typically means that you attempted to use functiona…

IDEA中Git常用操作及Git存储原理

Git简介与使用 Intro Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git是一款分布式版本控制系统&#xff08;VSC&#xff09;&#xff0c;是团队合作开发…

算法学习笔记(8.3)-(0-1背包问题)

目录 最常见的0-1背包问题&#xff1a; 第一步&#xff1a;思考每轮的决策&#xff0c;定义状态&#xff0c;从而得到dp表 第二步&#xff1a;找出最优子结构&#xff0c;进而推导出状态转移方程 第三步&#xff1a;确定边界条件和状态转移顺序 方法一&#xff1a;暴力搜素…

KBS(Knowledge-Based Systems)期刊投稿记录

记录一些关键时间节点 2023.12.31 投稿 2024.01.30 返回审稿意见 2024.05.20 提交r1 2024.05.31 返回审稿意见(conditional accept)包括语言润色 2024.06.09 提交r2&#xff0c;没有使用爱思维尔的润色 2024.06.10 with editor 2024.06.13 under review 2024.06.24 revise(折磨…

MFC之对话框--线宽/线型/颜色

文章目录 线宽输入实现优化无法记录上一次线粗问题 线宽滑动实现实现选择线类型实现颜色选择总结 线宽输入实现 优化无法记录上一次线粗问题 线宽滑动实现 实现选择线类型 实现颜色选择 总结 1。创建新窗口&#xff08;dialog)会创建一个新的类&#xff0c;在类中实现窗口中的…

vue中父子传递属性值

1、父传子属性值 自定义图库组件 在add.vue中应用tuku组件并给默认值 效果 2、 子传父&#xff0c;逆向赋值 add.vue和第一问中一样 修改tuku组件&#xff0c;传值给add.vue 3、多个传递 效果&#xff1a; 点击两个修改按钮后 4、使用defineModel简化父子传值 其他代码跟…