问题
怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)?
解决方案
直接对keys()
或者items()
使用集合操作,比如-
(差)、|
(并)、&
(交)
考虑下面两个字典:
a = {
'x': 1,
'y': 2,
'z': 3,
}
b = {
'w': 10,
'x': 11,
'y': 2,
}
要找到相同的key,可以对keys
做&
操作
>>> print(a.keys() & b.keys())
{'x', 'y'}
也可以使用这一特性来对字典过滤,例如去掉集合A中key为x和y两个元素
>>> print({key: a[key] for key in a.keys() - {'x', 'y'}})
{'z': 3}
但values()
不支持这样的集合操作,因为values()
返回的结果中,可能会有重复元素,也就不能当作一个集合来看了
讨论
dict.keys()
、dict.values()
和dict.items()
返回的是视图对象,也就是说当字典改变后,视图对象也会改变
>>> d = {'a': 1, 'b': 2}
>>> v = d.keys()
>>> print(v)
dict_keys(['a', 'b'])
>>> d['c'] = 3
>>> print(v)
dict_keys(['a', 'b', 'c'])
>>> d['d'] = 4
>>> print(v)
dict_keys(['a', 'b', 'c', 'd'])
并且dict.keys()
是set-like的,因为key的值是唯一的并且是可hash的,除此之外,当value的值也是可hash的时候,dict.items()
也是set-like的
set-like对象可以像set
对象一样执行集合间的操作
来源
Python Cookbook
关注
欢迎关注我的微信公众号:python每日一练
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。