【Python】辞書のキーと値を反転(逆マッピング)する4つの方法
辞書(dict)は、Pythonにおける基本的なデータ構造の一つで、キーと値のペアを格納できる変更可能なコレクションです。波括弧 {} を使って定義され、日常的なプログラミングはもちろん、Web開発や機械学習など幅広い分野で活用されています。
本記事では、辞書の「キー」と「値」を入れ替えて新しい辞書を作る方法(マッピングの反転)を、代表的な4つのアプローチごとにサンプルコードとともに解説します。
方法1:辞書内包表記を使う
最もシンプルでPythonらしいのが、辞書内包表記を使う方法です。items() メソッドでキーと値を取り出し、入れ替えた新しい辞書を一行で生成できます。
# 初期化
ini_dict = {101: "vishesh", 201: "laptop"}
print("initial dictionary : ", str(ini_dict))
# 辞書内包表記で反転
inv_dict = {v: k for k, v in ini_dict.items()}
print("inverse mapped dictionary : ", str(inv_dict))
方法2:zip() と dict() を使う
zip() 関数で「値」と「キー」をペアリングし、dict() で辞書化する方法です。こちらも簡潔で読みやすいコードになります。
ini_dict = {101: "vishesh", 201: "laptop"}
print("initial dictionary : ", str(ini_dict))
# zipとdictで反転
inv_dict = dict(zip(ini_dict.values(), ini_dict.keys()))
print("inverse mapped dictionary : ", str(inv_dict))
方法3:map() と reversed() を使う
map(reversed, ...) を使うと、各キー・バリューのタプルをまとめて反転したイテレータを一括で生成でき、それをそのまま辞書化できます。
ini_dict = {101: "akshat", 201: "ball"}
print("initial dictionary : ", str(ini_dict))
# mapとreversedで反転
inv_dict = dict(map(reversed, ini_dict.items()))
print("inverse mapped dictionary : ", str(inv_dict))
方法4:lambda式を使う
lambda式で反転処理を関数として定義しておけば、必要なときに何度でも呼び出して再利用できます。
ini_dict = {101: "akshat", 201: "ball"}
print("initial dictionary : ", str(ini_dict))
# lambdaで反転関数を定義して実行
invert = lambda d: {v: k for k, v in d.items()}
inv_dict = invert(ini_dict)
print("inverse mapped dictionary : ", str(inv_dict))
実行結果
initial dictionary : {101: 'vishesh', 201: 'laptop'}
inverse mapped dictionary : {'vishesh': 101, 'laptop': 201}
initial dictionary : {101: 'vishesh', 201: 'laptop'}
inverse mapped dictionary : {'vishesh': 101, 'laptop': 201}
initial dictionary : {101: 'akshat', 201: 'ball'}
inverse mapped dictionary : {'akshat': 101, 'ball': 201}
initial dictionary : {101: 'akshat', 201: 'ball'}
inverse mapped dictionary : {'akshat': 101, 'ball': 201}
反転時の注意点
- 値の重複:元の辞書の値が重複している場合、反転すると同じキーに上書きされ、一部のデータが失われます。
- ハッシュ不可能な値:リストなどハッシュ化できないオブジェクトが値に含まれていると、反転時にエラーが発生します。
- 順序について:Python 3.7以降では辞書は挿入順を保持しますが、反転後の並びは元の「値」の出現順になります。
まとめ
辞書のマッピングを反転するなら、辞書内包表記が最も簡潔で推奨される方法です。可読性や用途に応じて、zip() や map(reversed, ...)、lambda式を組み合わせる選択肢もあります。それぞれの特徴を理解し、場面に合った手法を使い分けましょう。
-
Pythonのマッピング型(辞書)とは?基本操作と主要メソッドを解説
Pythonにおけるマッピングオブジェクトは、ハッシュテーブルの値を任意のオブジェクトへ対応付けるために使用されるデータ構造です。Pythonには「辞書(dictionary)」というマッピング型が標準で用意されており、ミュータブル(変更可能)な性質を持っています。 辞書のキーには任意の値を使用でき、値としてもリストや整数など、さまざまな種類のオブジェクトを柔軟に格納することが可能です。なお、Python 3.7以降では、辞書は挿入された順序を保持する仕様になっています。 ここからは、辞書に関連する主なメソッドと操作を順番に見ていきましょう。 len(d)メソッド len()メソッドは、辞書に
-
Pythonの辞書メソッド一覧|使い方と機能をわかりやすく解説
はじめに Pythonの辞書(dict)は、キーと値のペアでデータを管理できる非常に便利なデータ構造です。この記事では、辞書で直接使える辞書メソッドと、辞書の操作に役立つ組み込み関数を一覧表にまとめて紹介します。それぞれの機能を把握しておくと、日常的なコーディングの効率が大きく向上します。 辞書の主なメソッド一覧 以下は、Pythonの辞書オブジェクトで利用できる代表的なメソッドです。 No.メソッド名と説明 1dict.clear()辞書内のすべての要素(キーと値のペア)を削除します。 2dict.copy()辞書のコピー(浅いコピー)を作成して返します。 3dict.fromkeys(