问题
怎样在两个字典中寻找相同点(比如相同的键、相同的值等)?
解决方案
考虑下面两个字典:
a = {
'x' : 1,
'y' : 2,
'z' : 3
}
b = {
'w' : 10,
'x' : 11,
'y' : 2
}
寻找两个字典的相同点,可以在两字典的 keys()
或者 items()
方法返回结果上执行集合操作。例如:
# Find keys in common
a.keys() & b.keys() # Return { 'x', 'y' }
# Find keys in a that are not in b
a.keys() - b.keys() # Return { 'z' }
# Find (key,value) pairs in common
a.items() & b.items() # Return { ('y', 2) }
这些集合操作,也可以用于修改或者过滤字典元素,例如:
c = {key:a[key] for key in a.keys() - {'w', 'z'}}
print(c)
{'y': 2, 'x': 1}
讨论
一个字典就是一个键集合与值集合的映射关系。
字典的 keys()
方法返回一个展现键集合的键视图对象,该对象支持集合操作,比如集合并、交、差运算。 所以,可以直接对字典的键执行普通的集合操作,而不用先将它们转换成一个 set。
字典的 items()
方法返回一个包含 (键,值) 对的元素视图对象,该对象同样也支持集合操作。
字典的 values()
方法返回结果,并不支持集合操作,因为值视图不能保证所有的值互不相同,这样会导致某些集合操作出现问题,可以先将值集合转换成 set,然后再执行集合运算。