如何在 Python 中获取字典交集

news2025/1/22 19:03:29

本文将讨论在 Python 中对两个或多个字典执行交集的不同方法。

文章目录

    • Python字典
    • 在 Python 中使用字典推导来交叉两个字典
    • 使用按位 & 运算符在 Python 中对两个字典进行交集
    • 使用 Set intersection() 方法在 Python 中将两个字典相交
    • 在 Python 中用于交叉多个字典的方法
    • 总结


Python字典

数据使用 Python 字典以键值对格式保存,它是一种可变数据结构。 Python 的字典数据类型可以模仿真实世界的数据排列,其中给定键存在特定值。

键和值是用于定义字典的元素:

  • 键应该是单个元素。
  • 值可以是任何类型,例如列表、整数、元组等。

换句话说,字典是一组键值对,其中值可以是任何 Python 对象。 相反,键是不可变的 Python 对象,例如字符串、元组或数字。

多个键值对可用于构建字典,在每对包含在大括号中之前,用冒号将每个键与其值分开。

语法如下:

dict = {'Name': 'John', 'Age': 18, 'Grade': '13'}

让我们看一个例子:

Python Dictionary Example


在 Python 中使用字典推导来交叉两个字典

我们可以使用不同的方法通过 Python 中的键来执行字典的交集。

  • 首先,将原始字典初始化为 dict01 和 dict02。
  • 打印原始词典。
  • 接下来假设 dict01 的 key 为 k1,执行 for 循环检查 dict01 中的 k1 是否存在于 dict02 中。 如果它确实有公共键,它的值将被推送到一个名为 intersection 的新字典中(字典可以根据要求优先选择)。
  • 打印具有公共键及其值的新字典交集。

例子:

# 初始化字典
dict01 = {'A': 1, 'B': 6, 'C': 3, 'D': 5}
dict02 = {'A': 1, 'C': 4, 'D': 5, 'E': 2}

# 打印原始词典
print ("First original dictionary: ", dict01)
print ("Second original dictionary: ", dict02)

# 执行 交集
intersection = {k1:dict01[k1] for k1 in dict01
          if k1 in dict02}

# 打印结果
print ("Intersected Dictionary: ", str(intersection))

如果运行上面的代码,您将收到下面列出的输出。

Python 字典交集使用字典理解 1

将 dict02 的键视为 k2。 按照相同的代码执行for循环,检查dict02中的k2是否也存在于dict01中。

此外,如果值是字符串类型:

# 初始化字典
dict01 = {1:'My', 2:'I', 3:'age'}
dict02 = {1:'name', 2:'live', 4:'year'}

# 定义一个函数来合并字符串
def mergeStrings(str01,str02):
    return str01+ ' '+ str02

# 执行 交集
intersectString = {k1:mergeStrings(dict01[k1],dict02[k1]) for k1 in dict01.keys() if k1 in dict02}

# 打印结果
print(intersectString)

让我们看看上面代码的结果:

Python 字典交集使用字典理解 2


使用按位 & 运算符在 Python 中对两个字典进行交集

它只是从字典中过滤公共键和键的对应值。 它只过滤具有相同值的键,这种方法更容易理解和应用。

  • 首先,将 dict01 和 dict02 初始设置为原始词典。
  • 接下来打印原始词典。
  • 接下来,使用 items() 函数将字典 dict01 和 dict02 转换为列表格式。
  • 然后,使用 & 运算符执行 AND。 然后使用 dict() 函数将公共键值对转换为字典,并存储在新的字典交集中。
  • 最后,打印新字典。

例子:

# 初始化字典
dict01 =  {'A': 1, 'B': 6, 'C': 3, 'D': 5}
dict02 =  {'A': 1, 'C': 4, 'D': 5, 'E': 2}

# 打印原始词典
print ("First original dictionary: ", dict01)
print ("Second original dictionary: ", dict02)

# 执行 交集
intersection = dict(dict01.items() & dict02.items())

# 打印结果
print ("Intersected Dictionary", str(intersection))

如果运行上述代码,您将收到以下结果。

使用按位 & 运算符的 Python 字典交集

在对 Python 字典交集执行按位 & 运算符时,各个键的键和值也应该相等。


使用 Set intersection() 方法在 Python 中将两个字典相交

set intersection() 方法返回一个集合,该集合由集合 m 和 n 中存在的元素组成,如下所示:

m = {'A': 1, 'B': 6, 'C': 3, 'D': 5}
n = {'A': 1, 'D': 5, 'E': 2}

setM = set( m )
setN = set( n )

setM.intersection( setN )

for item in setM.intersection(setN):
    print(item)

如果运行上面的示例代码,您将得到以下结果。

Python 字典交集使用 intersection()


在 Python 中用于交叉多个字典的方法

我们可以同时使用按位 & 运算符和 Set intersection() 方法,通过进一步编码轻松找到多个字典中相交的元素。

使用按位 & 运算符:

# 初始化字典
dict01 =  {'A': 1, 'B': 6, 'C': 3, 'D': 5}
dict02 =  {'A': 1, 'C': 4, 'D': 5, 'E': 2}
dict03 =  {'A': 1, 'C': 9, 'D': 5, 'E': 1}

# 打印原始词典
print ("First original dictionary: ", dict01)
print ("Second original dictionary: ", dict02)
print ("Third original dictionary: ", dict03)

# 执行 交集
intersection = dict(dict01.items() & dict02.items() & dict03.items())

# 打印结果
print ("Intersected Dictionary", str(intersection))

让我们看看上面代码执行后的结果:

Python 多字典交集使用 &

使用 Set intersection() 方法:

m = {'A': 1, 'B': 6,'D': 5, 'E': 2}
n = {'A': 1, 'D': 5, 'E': 2}
t = {'A': 1,'C': 4, 'D': 5, 'E': 2}

setM = set( m )
setN = set( n )
setT = set( t )

setM.intersection( setN ).intersection( setT)

for item in setM.intersection( setN ).intersection( setT):
    print(item)

我们来看看上面代码执行后的结果:

Python 多字典交集使用 intersection()

总结

最后,我们考虑了在 Python 中对两个或多个字典执行交集以创建一个新字典的快速有效的方法。 您可以根据自己的偏好和用例选择所需的任何方法。

我们发现了两个或多个字典的交集,它们都在键和键值对的级别上,有时对共同的键使用不同的功能。 这些方法当然不是唯一的; 你可以想到更多,也许在以后的 Python 版本中会添加针对这些任务的更明确的方法。

尽管几乎所有建议的代码都是一行代码,但它们都清晰而优雅。

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

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

相关文章

C-预处理

文章目录 预处理宏定义数值宏常量字符串宏常量使用宏充当注释去注释和宏替换谁先进行 用define宏定义表达式在if判断语句之后多条语句没有{}导致出错 定义不能带空格 #undef 条件编译#ifdef ifndef:判定的是宏是否被定义#if-#endif:宏定义是否为真宏定义进行多条件筛选#ifdef &…

听好程序员一句劝!零基础这样学Java才是正确的方式!

有一说一,Java还是现在很多新手入门学习的首选之一,新手学Java入门从哪里开始学?很多入门的小伙伴都会疑惑,今天好程序员给大家分享一下,超适合菜鸟入门的 Java学习路线 第一步,JavaSE,这是Java…

工具类——Java导出EXCEL2(设置样式、加载并填充图片、加载指定模板、大数据量设置窗口大小与刷新频率)

文章目录 一、POI设置样式二、POI导出图片1.解释XSSFClientAnchor 三、加载指定模板导出四、👉Workbook、XSSFWorkbook与SXSSFWorkbook1.大数据量导出1)根据数据量选择XSSFWorkbook,还是SXSSFWorkbook 书接上篇:工具类——Java 浏…

机器学习笔记之密度聚类——DBSCAN方法(Python代码实现)

机器学习笔记之密度聚类——DBSCAN方法[Python代码实现] 引言基本思想概念介绍算法过程完整算法描述 DBSCAN \text{DBSCAN} DBSCAN的优点和缺陷 2023/4/25 \text{2023/4/25} 2023/4/25补充:基于 Python \text{Python} Python的代码实现 引言 本节将介绍密度聚类——…

【MySQL】索引与事务

索引: 什么是索引?为什么要⽤索引 为了提高查询效率而使用的一种数据结构把数据组织起来; 例如生活中的字典:声母,韵母,声调。 创建索引:自动创建的主键约束,唯一约束&#xf…

qiankun-微前端

项目结构 主应用: vue3 vite 子应用1:vue3 vite 背景介绍 项目采用了vue3vite构建的,又因为qiankun不支持vite,所以需要引用 vite-plugin-qiankun 插件来解决 主应用–改造 安装 qiankun npm install qiankun重新定义一个…

浅浅入门SpringBoot之Thymeleaf模板

Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎,甚至在 Javascript中也会用到模板引擎技术,Java生态下的模板引擎有 Thymeleaf、 Freemaker、Ⅴ elocity、…

【EMQX】EMQX管理控制台即EMQX Dashboard简介

EMQX管理控制台 一、EMQX Dashboard简介二、主要功能2.1 监控和管理 EMQX 集群中的相关信息与数据2.2 访问控制(认证与授权)管理2.3 数据集成2.4 在线配置热更新2.5 管理系统扩展能力2.6 全面的诊断工具 三、启动3.1 首次登录3.2 忘记密码 四、配置 Dash…

我老板:你根本不懂 React!

前言 我已经使用 React 多年,我确信我非常了解它,但最近我的老板对我说,“你根本不知道 React,你对它一无所知。” 我很生他的气,但他指出了我程序中的三个漏洞。我现在把它记录下来,也分享给还不知道的小…

用好ChatGPT,毕业直接走上人生巅峰

毕业论文交上去了,学分也攒齐了。考研没上岸的准毕业生们接下来要面对的不是惨烈的秋招,就是蹲家准备二战。生活终于要对各位小可爱们动手啦! 不想默默承受社会的毒打? 不愿在屡战屡败屡败屡战的压力下秃头? 想必各位…

API 都有这些功能,你真的都知道么?

API(应用程序编程接口)可以提供以下功能: 数据传输:API可以在应用程序之间传输数据,包括发送和获取数据、更新数据等。 访问功能: API 可以调用另一个系统或应用程序的某些功能,例如获取天气,查…

基于无线传感器网络(WSN) 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本代码基于无线传感器网络,在两个节点(源节点和目标节点)之间找到最短路径,并开…

Java学习过程(韩顺平661-665)

网络通信是指在计算机网络中,通过网络连接的设备之间进行数据交换的过程。网络通信可以分为两种类型:有线网络通信和无线网络通信。 有线网络通信主要通过物理介质(如光纤、双绞线等)来传输数据,其中最常用的协议是以…

数字孪生新能源智慧充电桩Web3D可视化运维系统

放眼全球,近十年来,新能源汽车赛道堪称“热得发烫”。伴随着进入成年期的新能源汽车行业对相关配套设备支撑水平的提升,作为其“新基建”的充电桩领域表现更为突出的价值势能。过去,在一系列补贴政策和资本刺激下,充电…

七种MOS管栅极驱动电路

01 直接驱动 首先说一下电源IC直接驱动,下图是我们最常用的直接驱动方式,在这类方式中,我们由于驱动电路未做过多处理,因此我们进行PCB LAYOUT时要尽量进行优化。如缩短IC至MOSFET的栅极走线长度,增加走线宽度&#x…

《商用密码应用与安全性评估》第三章商用密码标准与产品应用3.4商用密码标准与产品

一、智能IC卡标准与产品 智能IC卡的分类 存储器卡:内部一般不包含密码安全机制,不具备信息处理能力,外部可对片内信息任意存取,因此存储器卡一般用于存放不需要保密的信息逻辑加密卡:逻辑加密卡内除了具有非易失性存…

redis缓存生产实践(一)---大key压缩

文章目录 前言一、缓存到底是使用String还是hash我该如何选择二、什么是大key及其影响2.1 什么是 Redis 大 key?2.2 大key带来的影响 三、大key压缩3.1 注解标记可能需要压缩的数据3.2 获取注解信息判断内存占用大小3.2 判断对象占用内存3.2 gzip压缩json3.2 判断当…

Reid之损失函数理论学习讲解

基于深度学习的Reid主要流程为输入图像-->CNN(提取特征)-->Global average pooling-->特征向量,将用这些特征来衡量图像的相似情况。并用这些特征进行检索,返回分类情况。 在训练网络的时候需要涉及损失函数,因此就引出了表征学习和…

大数据专业好找工作么

现在,在数字化转型的推动下,越来越多的企业意识到大数据的魅力,并不断在这个领域投入资金,Python大数据开发相关人才也备受青睐! 学Python之前:这玩意真有传说中那么好么? 学Python之后&#…