8

以下に示す辞書で、aa のキーが bb のキーと一致するかどうか、またそれに対応する値が bb で一致するかどうかを確認したい.このコードを記述するより良い方法はありますか

  aa = {'a': 1, 'c': 3, 'b': 2}
  bb = {'a': 1, 'b': 2}

  for k in aa:
    if k in bb:
      if aa[k] == bb[k]:
         print "Key and value bot matches in aa and bb"
4

4 に答える 4

18

集合を使ってすべての等価物を見つける:

for (key, value) in set(aa.items()) & set(bb.items()):
    print '%s: %s is present in both aa and bb' % (key, value)

ここでの&演算子は、両方のセットの交点を提供します。あるいは、次のように書くこともできます:

set(aa.items()).intersection(set(bb.items()))

これにより、両方の辞書の完全なコピーが作成されることに注意してください。これらが非常に大きい場合、これは最善の方法ではない可能性があります。

ショートカットは、キーのみをテストすることです。

for key in set(aa) & set(bb):
    if aa[key] == bb[key]:
        print '%s: %s is present in both aa and bb' % (key, value)

ここでは、各 dict のキーのみをコピーして、メモリ フットプリントを削減します。

Python 2.7 を使用する場合、dict タイプには、必要なセットを直接作成するための追加のメソッドが含まれます。

for (key, value) in aa.viewitems() & bb.viewitems():
    print '%s: %s is present in both aa and bb' % (key, value)

これらは技術的にはディクショナリ ビューですが、この問題の目的では同じように動作します。

于 2012-05-31T11:08:15.750 に答える
5

これは、次のようにワンライナーで記述できますall

all(bb[k] == v for k, v in aa.iteritems() if k in bb)

また、より宣言的なアプローチであり、意図をよりよく伝える可能性があります。

于 2012-05-31T11:10:50.317 に答える
0
aa = {'a': 1, 'c': 3, 'b': 2}
bb = {'a': 1, 'b': 2}

[k for k,v in aa.items() if k in bb]

['a', 'b']

パイソン3

于 2019-09-19T08:01:50.753 に答える