Python
 Computer >> コンピューター >  >> プログラミング >> Python

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()で長さを揃えておくと安心です。

  1. Pythonで2つのリストを辞書に変換する最も簡単な方法(zip関数の使い方)

    Pythonで2つのリストを1つの辞書にマッピングする方法 Pythonでは、組み込みのzip()関数とdict()関数を組み合わせることで、2つのリストを簡単に1つの辞書へと変換できます。これが最もシンプルで定番の方法です。 基本的な手順 zip()関数を使うと、2つのリストから対応する要素をペアにしたタプルを返すイテレータ(zipオブジェクト)が生成されます。このzipオブジェクトを、組み込み関数であるdict()に渡すことで、キーと値のペアを持つ辞書に変換できます。 >>> l1 = [name, age, marks] >>> l2 = [Ravi,

  2. 【初心者向け】Pythonの辞書(dict)をリストに変換する3つの方法

    Pythonの辞書をリストに変換するには? Pythonの辞書(dict)クラスには、リストへの変換に便利なメソッドが3つ用意されています。それぞれitems()、keys()、values()で、以下のようなビューオブジェクトを返します。 items():キーと値のペア(タプル)で構成されるビューオブジェクト keys():キーのみで構成されるビューオブジェクト values():値のみで構成されるビューオブジェクト これらのビューオブジェクトは、組み込み関数 list() を使うことで、簡単にリストオブジェクトへ変換できます。 実際のコード例 以下は、辞書から各ビューオブジェクトを取