Pythonで2つのリストから辞書を作成する3つの方法【for文・range・zip】
Pythonのリストは複数の値を順番に格納するデータ構造である一方、辞書(dict)は「キー」と「値」がペアになったキーバリューペア(key-value pair)を格納します。
本記事では、それぞれ別々に用意された2つのリスト(キー用リストと値用リスト)を組み合わせて、1つの辞書に変換する代表的な3つの方法を、サンプルコードと実行結果つきでわかりやすく解説します。
方法1:forループとremove()を使う方法
ネストした(入れ子構造の)2重forループを使用する方法です。内側のループで値リストの先頭要素を取り出して辞書の値として代入し、その要素をremove()メソッドで削除しながら処理を進めます。
サンプルコード
listK = ["Mon", "Tue", "Wed"]
listV = [3, 6, 5]
# 元となるリスト
print("List of K : ", listK)
print("list of V : ", listV)
# 空の辞書を用意
res = {}
# リストを辞書に変換
for key in listK:
for value in listV:
res[key] = value
listV.remove(value)
break
print("Dictionary from lists :\n ", res)実行結果
('List of K : ', ['Mon', 'Tue', 'Wed'])
('list of V : ', [3, 6, 5])
('Dictionary from lists :\n ', {'Wed': 5, 'Mon': 3, 'Tue': 6})この方法では、キーリストの各要素に対して、値リストの先頭から順に値が対応づけられていきます。ただし、元の値リストが破壊的に変更される点には注意が必要です。
方法2:forループとrange()を使う方法(辞書内包表記)
range()関数とlen()関数を組み合わせてインデックスを生成し、辞書内包表記の中で2つのリストの要素をペアにしていく方法です。すべてのキーと値のペアが作成されるまで、要素数を自動的に追跡してくれます。
サンプルコード
listK = ["Mon", "Tue", "Wed"]
listV = [3, 6, 5]
# 元となるリスト
print("List of K : ", listK)
print("list of V : ", listV)
# リストを辞書に変換
res = {listK[i]: listV[i] for i in range(len(listK))}
print("Dictionary from lists :\n ", res)実行結果
('List of K : ', ['Mon', 'Tue', 'Wed'])
('list of V : ', [3, 6, 5])
('Dictionary from lists :\n ', {'Wed': 5, 'Mon': 3, 'Tue': 6})1行で簡潔に書けるのが魅力で、元のリストが変更されないため安全です。Pythonらしい書き方としておすすめの方法です。
方法3:zip()関数を使う方法(最もシンプル)
zip()関数は、上記の方法と同様に2つのリストから要素を取り出し、キーと値のペアを作成します。dict()コンストラクタと組み合わせることで、最も短く直感的に記述できます。
サンプルコード
listK = ["Mon", "Tue", "Wed"]
listV = [3, 6, 5]
# 元となるリスト
print("List of K : ", listK)
print("list of V : ", listV)
# リストを辞書に変換
res = dict(zip(listK, listV))
print("Dictionary from lists :\n ", res)実行結果
('List of K : ', ['Mon', 'Tue', 'Wed'])
('list of V : ', [3, 6, 5])
('Dictionary from lists :\n ', {'Wed': 5, 'Mon': 3, 'Tue': 6})まとめ:どの方法を選ぶべきか?
- for + remove():ロジックを細かく制御したい場合に有効ですが、元のリストが破壊される点に注意。
- for + range()(辞書内包表記):1行で書け、可読性も高く、元のリストを保持したい場合に最適。
- zip() + dict():最もシンプルで高速な定番の方法。特別な理由がなければこの方法が推奨されます。
なお、2つのリストの長さが異なる場合、余分な要素は無視されるため、事前にlen()で長さを揃えておくと安心です。
-
Pythonで2つのリストを辞書に変換する最も簡単な方法(zip関数の使い方)
Pythonで2つのリストを1つの辞書にマッピングする方法 Pythonでは、組み込みのzip()関数とdict()関数を組み合わせることで、2つのリストを簡単に1つの辞書へと変換できます。これが最もシンプルで定番の方法です。 基本的な手順 zip()関数を使うと、2つのリストから対応する要素をペアにしたタプルを返すイテレータ(zipオブジェクト)が生成されます。このzipオブジェクトを、組み込み関数であるdict()に渡すことで、キーと値のペアを持つ辞書に変換できます。 >>> l1 = [name, age, marks] >>> l2 = [Ravi,
-
【初心者向け】Pythonの辞書(dict)をリストに変換する3つの方法
Pythonの辞書をリストに変換するには? Pythonの辞書(dict)クラスには、リストへの変換に便利なメソッドが3つ用意されています。それぞれitems()、keys()、values()で、以下のようなビューオブジェクトを返します。 items():キーと値のペア(タプル)で構成されるビューオブジェクト keys():キーのみで構成されるビューオブジェクト values():値のみで構成されるビューオブジェクト これらのビューオブジェクトは、組み込み関数 list() を使うことで、簡単にリストオブジェクトへ変換できます。 実際のコード例 以下は、辞書から各ビューオブジェクトを取