在两个字典中迭代共享密钥

2024-05-23 15:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个口述。他们共用一些钥匙。我想遍历这些共享密钥。这里有三种方法。在

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)

第一本看起来将来很难阅读。在

第二个循环中会有很多缩进。在

第三种方法使用continue,我发现这使得代码更难理解。在

我应该用什么有标准吗?它是这三种中的一种吗?在


Tags: 方法keyinforif密钥notbeta
2条回答

如果你想避免缩进(不过,真的,看起来不太像),想要比第一个更清晰的东西,你可以使用一个集合交集:

for k in x.keys() & y.keys():
    print k

&;是交集运算符,确保只迭代共享键。如果要迭代所有键,请使用x.keys()| y.keys()

最佳方法取决于您使用的Python版本。它们都涉及到对集合交集使用&运算符。在

  • 3.0+dict.keys()方法
  • 2.7+dict.viewkeys()方法
  • 2.3+set方法

数字键()3.0+

在Python3中,dict.keys()返回一个^{}对象,该对象重写了amp;运算符[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])

输出:

^{pr2}$

但是在python2中,这将给您一个TypeError

Traceback (most recent call last):
    for k in x.keys() & y.keys():
TypeError: unsupported operand type(s) for &: 'list' and 'list'

dict.view键()2.7+

不过,别着急!这个功能在2.7中被后移植到Python中,但是使用了不同的名称(以免破坏现有代码),^{}

for k in x.viewkeys() & y.viewkeys():
    print k, x[k], y[k]

(相同输出)

带集合2.3+

从2.3开始,您可以使用^{},以及交集运算符。在

s & t: new set with elements common to s and t

例如:

for k in set(x) & set(y):
    print k, x[k], y[k]

(相同输出)

但是,在这里,您复制了键所占用的空间(一次在字典中,用作键,再一次在一个完全独立的set)中)

[1]PEP-3106 Revamping dict.keys(), .values() and .items()

相关问题 更多 >