我有两个词.他们分享一些钥匙.我想迭代这些共享密钥.这有三种方法.
x={1:'a', 2:'b', 3:'c'}
y={2:'beta', 3:'gamma', 4:'delta'}
for n in (key for key in x if key in y):
print n
for n in x:
if n in y:
print n
for n in x:
if n not in y:
continue
print n
Run Code Online (Sandbox Code Playgroud)
第一个看起来将来很难阅读.
第二个将在循环中有很多缩进.
第三种用途continue,我发现使代码更难以遵循.
我应该使用什么标准?它是这三个中的一个吗?
最好的方法取决于您使用的Python版本.它们都涉及使用&运算符进行集合交集.
dict.keys()方法dict.viewkeys()方法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])
Run Code Online (Sandbox Code Playgroud)
输出:
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+
不过,请不要烦恼!这个功能在2.7中被反向移植到Python,但是使用不同的名称(以免破坏现有代码)dict.viewkeys(),:
for k in x.viewkeys() & y.viewkeys():
print k, x[k], y[k]
Run Code Online (Sandbox Code Playgroud)
(输出相同)
套装 - 2.3+
从2.3你可以使用sets,和交叉(&)运算符.
s&t:包含s和t共有元素的新集合
例如:
for k in set(x) & set(y):
print k, x[k], y[k]
Run Code Online (Sandbox Code Playgroud)
(输出相同)
但是,在这里,你复制了键占用的空间(一次在字典中,作为键,再一次完全分开set)
[1] PEP-3106改造dict.keys(),. value()和.items()