Python 辞書の交差

Migel Hewage Nimesha 2024年2月15日
  1. Python 辞書
  2. 辞書内包表記 を使用して Python で 2つの辞書を交差させる
  3. Python でビットごとの & 演算子を使用して 2つの辞書を交差させる
  4. Python で Set intersection() メソッドを使用して 2つの辞書を交差させる
  5. Python で複数の辞書を交差させる際に使用されるメソッド
  6. まとめ
Python 辞書の交差

この記事では、Python で 2つまたは複数の辞書に対して交差を実行するさまざまな方法について説明します。

Python 辞書

データは、Python 辞書を使用してキーと値のペア形式で保持され、変更可能なデータ構造です。 Python のディクショナリ データ型は、特定のキーに対して特定の値が存在する現実世界のデータ配置を模倣できます。

キーと値は、辞書を定義するために使用される要素です。

  • キーは単一の要素である必要があります。
  • 値は、リスト、整数、タプルなど、任意の型にすることができます。

つまり、ディクショナリはキーと値のペアのグループであり、値は任意の Python オブジェクトにすることができます。 対照的に、キーは文字列、タプル、数値などの不変の Python オブジェクトです。

複数のキーと値のペアを使用してディクショナリを作成できます。各ペアを中かっこで囲む前に、各キーとその値をコロンで区切ります。

構文は次のとおりです。

dict = {"Name": "John", "Age": 18, "Grade": "13"}

例を見てみましょう:

Python 辞書の例

辞書内包表記 を使用して Python で 2つの辞書を交差させる

Python でキーを介して辞書の交差を実行するために、さまざまなアプローチを使用できます。

  • まず、元の辞書を dict01dict02 に初期化して開始します。
  • 元の辞書を印刷します。
  • 次に、dict01 のキーを k1 として、for ループを実行し、dict01k1dict02 に存在するかどうかを確認します。 共通キーがある場合、その値は intersection と呼ばれる新しい辞書にプッシュされます (要件に応じて辞書を優先できます)。
  • 新しい辞書 intersection を共通キーとその値とともに出力します。

例:

# inititializing the dictionaries
dict01 = {"A": 1, "B": 6, "C": 3, "D": 5}
dict02 = {"A": 1, "C": 4, "D": 5, "E": 2}

# printing original dictionary
print("First original dictionary: ", dict01)
print("Second original dictionary: ", dict02)

# performing intersection
intersection = {k1: dict01[k1] for k1 in dict01 if k1 in dict02}

# printing output
print("Intersected Dictionary: ", str(intersection))

上記のコードを実行すると、以下に示す出力が表示されます。

辞書内包を使用した Python 辞書交差 1

dict02 のキーを k2 とします。 for ループを実行して、同じコードに従って、dict02k2dict01 にも存在するかどうかを確認します。

さらに、値が文字列型の場合:

# inititializing the dictionaries
dict01 = {1: "My", 2: "I", 3: "age"}
dict02 = {1: "name", 2: "live", 4: "year"}

# defining a function to merge strings


def mergeStrings(str01, str02):
    return str01 + " " + str02


# performing intersection
intersectString = {
    k1: mergeStrings(dict01[k1], dict02[k1]) for k1 in dict01.keys() if k1 in dict02
}

# printing output
print(intersectString)

上記のコードの結果を見てみましょう。

辞書内包を使用した Python 辞書交差 2

Python でビットごとの & 演算子を使用して 2つの辞書を交差させる

辞書から共通キーとキーに対応する値を単純にフィルタリングします。 同じ値を持つキーのみをフィルタリングします。このアプローチは、理解と適用がはるかに簡単です。

  • まず、最初に元の辞書で dict01dict02 を設定します。
  • 次に元の辞書を印刷します。
  • 次に、辞書 dict01dict02items() 関数を使用してリスト形式に変換します。
  • 次に、& 演算子を使用して AND を実行します。 共通のキーと値のペアは、dict() 関数を使用して辞書に変換され、新しい辞書 intersection に格納されます。
  • 最後に、新しい辞書を印刷します。

例:

# inititializing dictionary
dict01 = {"A": 1, "B": 6, "C": 3, "D": 5}
dict02 = {"A": 1, "C": 4, "D": 5, "E": 2}

# printing original dictionary
print("First original dictionary: ", dict01)
print("Second original dictionary: ", dict02)

# performing intersection
intersection = dict(dict01.items() & dict02.items())

# printing output
print("Intersected Dictionary", str(intersection))

上記のコードを実行すると、次の結果が得られます。

ビット単位 & 演算子を使用した Python 辞書交差

Python 辞書の交差に対してビット単位の & 演算子を実行する場合、それぞれのキーのキーと値の両方も等しくなければなりません。

Python で Set intersection() メソッドを使用して 2つの辞書を交差させる

set intersection() メソッドは、セット mn の両方に存在する要素で構成されるセットを次のように返します。

m = {"A": 1, "B": 6, "C": 3, "D": 5}
n = {"A": 1, "D": 5, "E": 2}

setM = set(m)
setN = set(n)

setM.intersection(setN)

for item in setM.intersection(setN):
    print(item)

上記のサンプル コードを実行すると、以下の結果が得られます。

intersection() を使用した Python 辞書の交差

Python で複数の辞書を交差させる際に使用されるメソッド

ビットごとの & 演算子と Set intersection() メソッドの両方を使用して、複数の辞書で交差する要素をさらにコーディングして簡単に見つけることができます。

ビットごとの & 演算子の使用:

# inititializing dictionary
dict01 = {"A": 1, "B": 6, "C": 3, "D": 5}
dict02 = {"A": 1, "C": 4, "D": 5, "E": 2}
dict03 = {"A": 1, "C": 9, "D": 5, "E": 1}

# printing original dictionary
print("First original dictionary: ", dict01)
print("Second original dictionary: ", dict02)
print("Third original dictionary: ", dict03)

# performing intersection
intersection = dict(dict01.items() & dict02.items() & dict03.items())

# printing output
print("Intersected Dictionary", str(intersection))

上記のコードを実行した後の結果を見てみましょう。

& を使用した Python 複数辞書の交差

Set intersection() メソッドの使用:

m = {"A": 1, "B": 6, "D": 5, "E": 2}
n = {"A": 1, "D": 5, "E": 2}
t = {"A": 1, "C": 4, "D": 5, "E": 2}

setM = set(m)
setN = set(n)
setT = set(t)

setM.intersection(setN).intersection(setT)

for item in setM.intersection(setN).intersection(setT):
    print(item)

上記のコードを実行した後の結果を見てみましょう。

intersection() を使用した Python 複数辞書の交差

まとめ

まとめとして、Python で 2つまたは複数の辞書を交差させて新しい辞書を作成するための迅速かつ効率的な方法を検討しました。 好みやユースケースに基づいて、必要なアプローチを選択できます。

すべてキーとキーと値のペアのみのレベルで、共通のキーに異なる関数を使用することもある、2つ以上の辞書の共通部分を見つけました。 これらの方法は確かに唯一のものではありません。 より多くのことを考えることができ、おそらくこれらのタスクのためのより明示的なメソッドが、Python の後のバージョンで追加されるでしょう。

提案されたコードのビットのほとんどすべてがワンライナーですが、それらはすべて明確でエレガントです。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

関連記事 - Python Dictionary