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

Pythonで複数のリストから辞書を作成する方法|zipとenumerateの使い方

Pythonでは、リストやタプルといったコレクション型を別の型へ変換したい場面が非常によくあります。本記事では、複数のリストが与えられたときに、それらを組み合わせて1つの辞書(dict)を作成する方法を解説します。ポイントは、ばらばらに存在するリストの要素を、辞書の「キー」と「値」のペアとして正しく対応付けることです。

ここでは代表的な2つの手法、「zip関数」と「enumerate関数」を使った方法を、サンプルコードと実行結果つきで紹介します。

方法1:zip関数を使って辞書を作成する

zip関数を使うと、複数のリストの要素をインデックス順にまとめて取り出せます。以下の例では、3つのリストを入力として受け取り、それらを組み合わせて1つの辞書を作成しています。1つ目のリストが辞書のキーを供給し、残りの2つのリストが各キーに対応する値(曜日と果物)を保持します。

サンプルコード

key_list = [1, 2, 3]
day_list = ['Friday', 'Saturday', 'Sunday']
fruit_list = ['Apple', 'Banana', 'Grape']

# 与えられたリスト
print("Given key list : " + str(key_list))
print("Given day list : " + str(day_list))
print("Given fruit list : " + str(fruit_list))

# 辞書の作成
res = {key: {'Day': day, 'Fruit': fruit} for key, day, fruit in
       zip(key_list, day_list, fruit_list)}

# 結果の出力
print("The final dictionary : \n", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given key list : [1, 2, 3]
Given day list : ['Friday', 'Saturday', 'Sunday']
Given fruit list : ['Apple', 'Banana', 'Grape']
The final dictionary :
{1: {'Day': 'Friday', 'Fruit': 'Apple'}, 2: {'Day': 'Saturday', 'Fruit': 'Banana'}, 3: {'Day': 'Sunday', 'Fruit': 'Grape'}}

内包表記の中で for key, day, fruit in zip(...) とすることで、3つのリストから同じ位置の要素を同時に取り出し、ネストされた辞書を一括生成できていることがわかります。

方法2:enumerate関数を使って辞書を作成する

enumerate関数は、イテラブルなオブジェクトに対して「カウンター(インデックス)」を付加してくれる便利な関数です。今回はkey_listを引数として渡し、得られたインデックスを利用してday_listとfruit_listの要素にアクセスします。

サンプルコード

key_list = [1, 2, 3]
day_list = ['Friday', 'Saturday', 'Sunday']
fruit_list = ['Apple', 'Banana', 'Grape']

# 与えられたリスト
print("Given key list : " + str(key_list))
print("Given day list : " + str(day_list))
print("Given fruit list : " + str(fruit_list))

# 辞書の作成
res = {val: {"Day": day_list[key], "Fruit": fruit_list[key]}
       for key, val in enumerate(key_list)}

# 結果の出力
print("The final dictionary : \n", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given key list : [1, 2, 3]
Given day list : ['Friday', 'Saturday', 'Sunday']
Given fruit list : ['Apple', 'Banana', 'Grape']
The final dictionary :
{1: {'Day': 'Friday', 'Fruit': 'Apple'}, 2: {'Day': 'Saturday', 'Fruit': 'Banana'}, 3: {'Day': 'Sunday', 'Fruit': 'Grape'}}

enumerateによって (0, 1), (1, 2), (2, 3) のような「インデックスと値」のペアが得られるため、そのインデックスを使って他のリストの要素を参照し、同じ構造の辞書を作れています。

まとめ

  • zip関数:複数のリストを並列に走査できるため、リスト同士の対応関係がそのまま反映され、直感的で読みやすいコードになります。
  • enumerate関数:インデックスを明示的に扱いたい場合に有効で、位置情報をもとに他のリストへアクセスできます。

どちらの方法でも結果は同じですが、一般的には要素同士の対応付けが目的であればzipの方がシンプルで推奨されます。なお、zipは最も短いリストの長さに合わせて処理が終了するため、リストの長さが異なる場合は注意が必要です。状況に応じて使い分けるとよいでしょう。

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

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

  2. 【Python入門】リスト・タプル・辞書の違いを徹底解説

    Pythonの3大コレクション:リスト、タプル、辞書 Pythonには複数のデータをまとめて扱うためのコレクション型が用意されています。中でもよく使われるのがリスト(list)、タプル(tuple)、辞書(dict)の3つです。それぞれ特徴が異なるため、用途に応じて使い分けることが重要です。 基本的な違いの概要 リストとタプルはシーケンス(順序付き)オブジェクトであり、要素を順番に並べて管理します。一方、辞書はキーと値のペアを格納するハッシュテーブル構造です。 リストとタプルは「順序を持つコレクション」ですが、辞書は「順序を持たないコレクション」として扱われます。 リストと辞書はミュータブ