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


文章目录

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



Python字典

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

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

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

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

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

语法如下:

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

让我们看一个例子:

python字典操作运算符 交集 python字典取交集_python字典操作运算符 交集


在 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字典操作运算符 交集 python字典取交集_开发语言_02

将 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字典操作运算符 交集 python字典取交集_开发语言_03


使用按位 & 运算符在 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字典取交集_Python_04

在对 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字典操作运算符 交集 python字典取交集_python字典操作运算符 交集_05


在 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字典操作运算符 交集 python字典取交集_python_06

使用 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字典取交集_python字典操作运算符 交集_07

总结

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

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

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