Python字典的交集

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

Python字典

使用Python字典,数据以键值对的格式保存,它是一个可变的数据结构。Python的字典数据类型可以模仿现实世界的数据安排,在这种情况下,一个给定的键存在一定的值。

键和值是用来定义 dictionary 的元素:

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

换句话说,一个 dictionary 是一组键-值对,其中值可以是任何 Python 对象。相比之下,键是不可改变的 Python 对象,如字符串、元组或数字。

多个键值对可以用来建立一个字典,在每个键值对包含在大括号中之前,用冒号把每个键和它的值分开。

语法如下:

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

我们来看看一个例子:

Python Dictionary Example

在 Python 中使用字典理解法来交叉两个字典

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

  • 首先,将原始字典初始化为dict01dict02 ,开始使用。
  • 接下来,将dict01 的键视为k1 并执行for 循环,检查dict01 中的k1 是否存在于dict02 中。如果它确实有共同的键,它的值将被推入一个新的字典,称为intersection (这个字典可以根据需要选择)。

例子:

# inititializing the dictionaries
dict01 = {'A': 1, 'B': 6, 'C': 3, 'D': 5}
dict02 = {'A': 1, 'C': 4, 'D': 5, 'E': 2}
# printing original dictionary
print ("First original dictionary: ", dict01)
print ("Second original dictionary: ", dict02)
# performing intersection
intersection = {k1:dict01[k1] for k1 in dict01
          if k1 in dict02}
# printing output
print ("Intersected Dictionary: ", str(intersection))

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

Python Dictionary Intersection Using Dictionary Comprehension 1

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

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

# inititializing the dictionaries
dict01 = {1:'My', 2:'I', 3:'age'}
dict02 = {1:'name', 2:'live', 4:'year'}
#defining a function to merge strings
def mergeStrings(str01,str02):
    return str01+ ' '+ str02
# performing intersection
intersectString = {k1:mergeStrings(dict01[k1],dict02[k1]) for k1 in dict01.keys() if k1 in dict02}
# printing output
print(intersectString)

让我们来看看上述代码的结果:

Python Dictionary Intersection Using Dictionary Comprehension 2

在Python中使用Bitwise& 操作符来交叉两个字典

它只是简单地过滤了字典中的普通键和键的对应值。它只过滤具有相同值的键,这种方法在理解和应用上要简单得多。

  • 首先,最初用原始字典设置dict01dict02
  • 接下来,使用items() 函数将字典dict01dict02 转换为列表格式。
  • 然后,使用& 操作符进行AND。然后使用dict() 函数将常见的键值对转换为字典,并存储在新的字典intersection 中。
  • 最后,打印新的字典。

例子:

# inititializing dictionary
dict01 =  {'A': 1, 'B': 6, 'C': 3, 'D': 5}
dict02 =  {'A': 1, 'C': 4, 'D': 5, 'E': 2}
# printing original dictionary
print ("First original dictionary: ", dict01)
print ("Second original dictionary: ", dict02)
# performing intersection
intersection = dict(dict01.items() & dict02.items())
# printing output
print ("Intersected Dictionary", str(intersection))

如果你运行上面的代码,你会得到以下结果。

Python Dictionary Intersection Using Bitwise & Operator

当执行Python字典相交的Bitwise& 操作时,各自的键和值也应该是相等的。

在Python中使用Setintersection() 方法来相交两个字典

setintersection() 方法返回一个集合,该集合由同时存在于集合mn 中的元素组成,如下所示:

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 Dictionary Intersection Using intersection()

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

我们可以使用位操作符& 和集合intersection() 方法,通过进一步的编码,轻松找到多个字典中相交的元素。

使用Bitwise& 操作符:

# inititializing dictionary
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}
# printing original dictionary
print ("First original dictionary: ", dict01)
print ("Second original dictionary: ", dict02)
print ("Third original dictionary: ", dict03)
# performing intersection
intersection = dict(dict01.items() & dict02.items() & dict03.items())
# printing output
print ("Intersected Dictionary", str(intersection))

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

Python Multiple Dictionaries Intersection Using &

使用Setintersection() 方法:

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 Multiple Dictionaries Intersection Using intersection()

结论

总结一下,我们考虑了在Python中对两个或多个字典进行相交以创建一个新字典的快速而有效的方法。你可以根据你的偏好和用例选择任何你需要的方法。

我们发现两个或多个字典的相交,都是在只有键和键值对的层面上进行的,有时对共同的键使用不同的函数。这些方法当然不是唯一的,你可以想到更多,也许在以后的 Python 版本中会为这些任务增加更明确的方法。

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