Python: 2つのリストから辞書を作成する

Pythonで2つのリストを基に1つの辞書 (ディクショナリ)を作成する方法を紹介します。 「2つのリスト」の部分は「2つのタプル」でも「リストとタプル」 でも同じように辞書を作成できます。

最もシンプルなのはzip()関数とdictコンストラクタを使う方法ですが、 他にもいくつか方法があるので順番に紹介します。

zip() + dictコンストラクタ

zip()関数dictコンストラクタを使うと1行で辞書を作成できます。 zip()関数は引数で指定したリストなどのイテラブルなオブジェクトの要素を 組み合わせてzipオブジェクトを返します。
zipオブジェクトをdictコンストラクタに渡すと辞書が生成できます。

次のサンプルコードでは、2つのリスト(namesとnumbers)を基に、 namesをキー、numbersを値とする辞書を作成しています。

names = ["a", "b", "c"]

numbers = [1, 2, 3]

d = dict(zip(names, numbers))

print(d) # {'a': 1, 'b': 2, 'c': 3}

zip() + 辞書内包表記

zip()関数辞書内包表記を使って作成することもできます。 辞書内包表記を使った場合はif条件式で何らかの条件を付けることが可能になります。

次のサンプルコードでは、 zip()関数と辞書内包表記を使って辞書を作成していますが、 その際にifを使って「if v % 2 == 1」を記述することで、 リスト numbersの値が奇数の場合に限定して辞書を作成しています。

names = ["a", "b", "c"]

numbers = [1, 2, 3]

d = {c:v for c, v in zip(names, numbers) if v % 2 == 1}

print(d) # {'a': 1, 'c': 3}

このように、何らかの条件がある場合は辞書内包表記を使うと便利です。

zip()を使わずに作成する

zip()関数を使わずに、for文だけで辞書を作成することも可能です。

次のサンプルコードでは、 for文とループカウンタを使うことで 2つのリストから1つの辞書を作成しています。

names = ["a", "b", "c"]

numbers = [1, 2, 3]

d = {}
i = 0
for k in names:
	d[k] = numbers[i]
	i += 1

print(d) # {'a': 1, 'b': 2, 'c': 3}
Python