Python每日一練0008
阿新 • • 發佈:2019-01-28
問題
怎樣在兩個字典中尋尋找相同點(比如相同的鍵、相同的值等等)?
解決方案
直接對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每日一練