最好的方法取決於你使用的是什麼版本的Python。它們都涉及使用&
運算符來設置交集。
- 3.0+
dict.keys()
方法
- 2.7+
dict.viewkeys()
方法
- 2.3+
set
方法
dict.keys() - 3.0+
在Python 3,dict.keys()
返回一個dict_keys
對象,該對象覆蓋&運營商[1]:
x={1:'a', 2:'b', 3:'c'}
y={2:'beta', 3:'gamma', 4:'delta'}
for k in x.keys() & y.keys():
print(k, x[k], y[k])
輸出:
2 b beta
3 c gamma
但是在Python 2,這會給你一個TypeError
:
Traceback (most recent call last):
for k in x.keys() & y.keys():
TypeError: unsupported operand type(s) for &: 'list' and 'list'
dict.viewkeys() - 2.7+
然而,不要擔心!此功能被向後移植到Python 2.7,但以不同的名稱(以免破壞現有的代碼),dict.viewkeys()
:
for k in x.viewkeys() & y.viewkeys():
print k, x[k], y[k]
(同輸出)
帶套 - 2.3+
從2.3開始,您可以使用sets
和交點(&)運算符。
小號& T:一套新的共同元素,S和T
例如:
for k in set(x) & set(y):
print k, x[k], y[k]
(同輸出)
但在這裏,你複製鑰匙佔用的空間(一次在字典中,作爲鑰匙,再次在完全獨立的set
)
[1] PEP-3106 Revamping dict.keys(), .values() and .items()
的Python 2具有['dict.viewkeys()'](https://docs.python.org/2/library/stdtypes.html#dict.viewkeys)。使用'set()'也是多餘的。如果你需要使用'set()',那麼直接*在字典上,所以'set(x)&set(y)',不需要創建額外的列表/字典視圖對象。 – 2015-03-19 08:38:08
@MartijnPieters這是一個很好的關於2.7的backports和鍵,我會相應地更新。 – jedwards 2015-03-19 08:39:33