最好的方法取决于你使用的是什么版本的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