Python 查找两字典的相同点

查找两字典的相同点


问题


如何在两个字典中寻找相同点(例如相同的键或者相同的值等)?

解决方法


假设有如下的两个字典:

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,然后执行集合运算。

以上为本篇的主要内容。

发布了52 篇原创文章 · 获赞 16 · 访问量 5734

猜你喜欢

转载自blog.csdn.net/weixin_45642918/article/details/103649018