问题
在两个字典中,如果我们想要找到其中相同的地方,比如相同的键、相同的值等。
解决方案
考虑以下两个字典以及其中内容:
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相同的键值对,返回的是相同值的键值对
讨论
字典,就是一系列键与值之间的映射集合。字典的 keys()
方法会返回 keys-view
对象,其中暴露了所有的键。关于字典的键,有一个很重要的特性就是支持常见的操作集合,比如求并集、交集和差集。因此,如果需要对字典的键做常见的集合操作,那么就可以直接使用 keys-view
对象而不必先将其转换为集合。
字典的 items()
方法返回 (key, value)
键值对组成的 keys-view
对象。这个对象支持类似的集合操作,可用来找出两个字典之间有哪些键值对有相同之处。
需要注意的是,尽管类似,但是 values()
方法不支持集合操作。根本上的原因,可能是值不具备唯一的特性。这会使得某些特定的集合操作是存在问题的。如果的确需要做操作,那么先请先将其转换为集合。