Pythonで2つのリストから辞書(dict)を作成する方法を解説
Pythonで2つのリストから辞書を作成する基本の方法
Pythonでは、キーのリスト(L1)と値のリスト(L2)がそれぞれ別のリストオブジェクトとして用意されている場合、辞書内包表記を使うことで、簡潔に辞書オブジェクトを構築できます。
以下のように、リストのインデックス番号をキーとして、対応する要素同士を組み合わせるのが基本的な考え方です。
辞書内包表記を使用した例
>>> L1 = ['a','b','c','d']
>>> L2 = [1,2,3,4]
>>> d = {L1[k]:L2[k] for k in range(len(L1))}
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4}このコードでは、range(len(L1))によってリストL1の各インデックス(0〜3)を順番に取り出し、L1[k]をキー、L2[k]を値として新しい辞書dを作成しています。
zip()関数を使ったよりPythonicな書き方
実務では、組み込み関数zip()と組み合わせた辞書内包表記や、dict()コンストラクタを利用する方法がよりシンプルで推奨されます。
>>> L1 = ['a','b','c','d']
>>> L2 = [1,2,3,4]
>>> d = dict(zip(L1, L2))
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4}zip(L1, L2)は2つのリストから対応する要素同士のタプル('a', 1)などを生成し、dict()がそれらをそのまま辞書に変換します。コードが短くなり、可読性も高まります。
辞書内包表記とzip()を併用する場合
>>> d = {k: v for k, v in zip(L1, L2)}この形式なら、値の変換やフィルタリングなどの処理を追加したい場合にも柔軟に対応できます。
注意点
- 2つのリストの長さが異なる場合、
zip()は短い方の長さに合わせて処理を打ち切ります。余分な要素を無視せずエラーを出したい場合は、Python 3.10以降で利用できるzip(L1, L2, strict=True)を使用すると安全です。 - キーとなるリストL1に重複した要素が含まれている場合、後から出現した値が前の値を上書きします。
まとめ
2つのリストから辞書を作成するには、インデックスを利用した辞書内包表記のほか、dict(zip(L1, L2))という簡潔な方法があります。特別な理由がない限り、後者のzip()を使う方法が最もシンプルで読みやすいコードになります。用途に応じて使い分けましょう。
-
Pythonでネストされた辞書(入れ子のdict)を作成する方法
Pythonの辞書(dict)オブジェクトはミュータブル(変更可能)です。この特性を利用すると、ある辞書の「値」として、別の辞書オブジェクトをそのまま格納することができます。このように、キーに対応する値としてさらに辞書が定義されている構造を、ネストされた辞書(入れ子構造の辞書)と呼びます。ネストされた辞書の基本構文ネストされた辞書は、外側のキーに対して、波括弧 {} で囲まれた新しい辞書を値として指定するだけで作成できます。>>> students={"student1":{"name":"Raaj", "
-
Pythonの辞書からキーを削除する方法を解説!del文・pop()・popitem()の使い分け
はじめに Pythonの辞書(dict)は、キーと値のペアでデータを管理できる非常に便利なデータ構造です。プログラムの実行中に不要になった要素を削除したい場面は多くありますが、Pythonにはいくつかの削除方法が用意されています。 この記事では、代表的な削除方法であるdel文とpop()メソッドを中心に、それぞれの特徴や使い分けのポイントを実行例とともにわかりやすく解説します。 del文でキーを削除する Pythonのdelキーワードは、ほぼすべてのオブジェクトに対して使用できます。辞書から特定の要素を削除する場合は、delステートメントにキーを指定します。 >>> D1