脚踏实地的大梦想家

脚踏实地的大梦想家

问题

在两个字典中,如果我们想要找到其中相同的地方,比如相同的键、相同的值等。

解决方案

考虑以下两个字典以及其中内容:

a = {
    'x': 1,
    'y': 2,
    'z': 3
}

b = {
    'w': 10,
    'x': 11,
    'y': 2
}

要找出这两个字典中的相同之处,只需通过 keys()items() 方法执行常见的集合操作即可,比如:

print(a.keys() & b.keys())		# 找到a与b相同的键
print(a.keys() - b.keys())		# 找到a中b没有的键
print(a.items() & b.items())	# 找到a与b相同的键值对,返回的是相同值的键值对

【Python Cookbook】S1E08 在两个字典中寻找相同点-LMLPHP

讨论

字典,就是一系列键与值之间的映射集合。字典的 keys() 方法会返回 keys-view 对象,其中暴露了所有的键。关于字典的键,有一个很重要的特性就是支持常见的操作集合,比如求并集、交集和差集。因此,如果需要对字典的键做常见的集合操作,那么就可以直接使用 keys-view 对象而不必先将其转换为集合。

字典的 items() 方法返回 (key, value) 键值对组成的 keys-view 对象。这个对象支持类似的集合操作,可用来找出两个字典之间有哪些键值对有相同之处。

需要注意的是,尽管类似,但是 values() 方法不支持集合操作。根本上的原因,可能是值不具备唯一的特性。这会使得某些特定的集合操作是存在问题的。如果的确需要做操作,那么先请先将其转换为集合。

06-01 14:02