本文将讨论在 Python 中对两个或多个字典执行交集的不同方法。
文章目录
- Python字典
- 在 Python 中使用字典推导来交叉两个字典
- 使用按位 & 运算符在 Python 中对两个字典进行交集
- 使用 Set intersection() 方法在 Python 中将两个字典相交
- 在 Python 中用于交叉多个字典的方法
- 总结
Python字典
数据使用 Python 字典以键值对格式保存,它是一种可变数据结构。 Python 的字典数据类型可以模仿真实世界的数据排列,其中给定键存在特定值。
键和值是用于定义字典的元素:
- 键应该是单个元素。
- 值可以是任何类型,例如列表、整数、元组等。
换句话说,字典是一组键值对,其中值可以是任何 Python 对象。 相反,键是不可变的 Python 对象,例如字符串、元组或数字。
多个键值对可用于构建字典,在每对包含在大括号中之前,用冒号将每个键与其值分开。
语法如下:
dict = {'Name': 'John', 'Age': 18, 'Grade': '13'}
让我们看一个例子:
在 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))
如果运行上面的代码,您将收到下面列出的输出。
将 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 中对两个字典进行交集
它只是从字典中过滤公共键和键的对应值。 它只过滤具有相同值的键,这种方法更容易理解和应用。
- 首先,将 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 字典交集执行按位 &
运算符时,各个键的键和值也应该相等。
使用 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 中用于交叉多个字典的方法
我们可以同时使用按位 & 运算符和 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))
让我们看看上面代码执行后的结果:
使用 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 中对两个或多个字典执行交集以创建一个新字典的快速有效的方法。 您可以根据自己的偏好和用例选择所需的任何方法。
我们发现了两个或多个字典的交集,它们都在键和键值对的级别上,有时对共同的键使用不同的功能。 这些方法当然不是唯一的; 你可以想到更多,也许在以后的 Python 版本中会添加针对这些任务的更明确的方法。
尽管几乎所有建议的代码都是一行代码,但它们都清晰而优雅。