Python 3-2つの辞書の同じ点を検索

1199 ワード

に質問
2つの辞書で同じ点(同じキー、同じ値など)を探すにはどうすればいいですか?
ソリューション
次の2つの辞書を考慮します.
a = {
    'x' : 1,
    'y' : 2,
    'z' : 3
}

b = {
    'w' : 10,
    'x' : 11,
    'y' : 2
}

2つの辞書の同じ点を探して、2つの辞書のkeys()またはitems()メソッドが結果を返す上で集合動作を実行することができる.例:
# Find keys in common
a.keys() & b.keys() # Return { 'x', 'y' }

# Find keys in a that are not in b
a.keys() - b.keys() # Return { 'z' }

# Find (key,value) pairs in common
a.items() & b.items() # Return { ('y', 2) }

これらのコレクション操作は、辞書要素の変更やフィルタリングにも使用できます.たとえば、次のようにします.
c = {key:a[key] for key in a.keys() - {'w', 'z'}}
print(c)

{'y': 2, 'x': 1}

ディスカッション
辞書は、キーセットと値セットのマッピング関係です.
辞書のkeys()メソッドは、セットのマージ、交差、差分演算などのセット操作をサポートする、キーセットを示すキービューオブジェクトを返す.したがって、setに変換することなく、辞書のキーに対して通常の集合操作を直接実行することができます.
辞書のitems()メソッドは、集合操作もサポートする(キー、値)ペアを含む要素ビューオブジェクトを返します.
ディクショナリのvalues()メソッドは、値ビューがすべての値が互いに異なることを保証できないため、結果を返します.これにより、値セットをsetに変換してからセット演算を実行できるいくつかのセット操作に問題が発生します.