查找两字典的相同点
问题
如何在两个字典中寻找相同点(例如相同的键或者相同的值等)?
解决方法
假设有如下的两个字典:
a = {
'x' : 1,
'y' : 2,
'z' : 3
}
b = {
'w' : 10,
'x' : 11,
'y' : 2
}
寻找两个字典的相同点,可以简单的在两个字典的 key()
或者 items()
方法返回结果上执行集合的操作。示例如下:
>>> a.keys() & b.keys() # 查找相同的键
{'y', 'x'}
>>> a.keys() - b.keys() # 查找存在于 a 但不存在于 b 的键
{'z'}
>>> a.items() & b.items() # 查找相同的键值对
{('y', 2)}
这些操作可以用于修改或者过滤字典元素。比如,例如以原有字典构造一个排除指定键的新字典。利用字典推导式来实现需求:
>>> c = {key:a[key] for key in a.keys() - {'z','w'}}
>>> c
{'y': 2, 'x': 1}
代码解析
字典,就是键集合与值集合的映射关系。字典的 keys()
方法返回一个展现集合的键视图对象。键视图有一个特性,就是它们也支持集合的操作,例如,集合并、交、差运算。所以如果想对集合的键执行普通的集合操作,可以直接使用键视图进行操作,而不用将它们转换为集合 set 再进行集合操作。
字典的 items()
方法返回一个包含 (键,值) 对的元素视图对象。这个对象同样支持集合操作,并且可以用来查找两个字典是否有相同的键值对。
但是,不建议对 values()
方法使用上面介绍的集合操作。因为在某种程度上来说,值视图并不能保证所有的值都互不相同,这个前提就会导致使用结合操作出现问题。如果一定要对值进行这些集合操作,需要先将值集合转换为 set,然后执行集合运算。
以上为本篇的主要内容。
网友评论