schedule2019-04-23

2つの配列から辞書(dict)型に変換するワンライナー | Python

2つの配列から辞書(dict)型に変換するワンライナーを思いついたので紹介します。 zip()と辞書型のリスト内法表記を使って書きます。

動作確認:Python 3.7

2つの配列から辞書(dict)型に変換するワンライナー

keysvaluesの2つの配列から{key: value}のようなdictを作成します。

keys = ['a', 'b', 'c']
values = [1, 2, 3]

dic = {key: val for key, val in zip(keys, values)}

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

注意点 : 配列の長さが異なる場合

配列の長さが異なる場合、zip()は短い方に合わせます。

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3]

dic = {key: val for key, val in zip(keys, values)}

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

配列長が長い方に合わせたいときは、itertoolszip_longest()を使います。 足りない要素はNoneで補います。

# len(keys) > len(values)
from itertools import zip_longest

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3]

dic = {key: val for key, val in zip_longest(keys, values)}

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

ただし、keysが短い場合はkeyがNoneになります。

# len(keys) < len(values)
from itertools import zip_longest

keys = ['a', 'b', 'c']
values = [1, 2, 3, 4, 5]

dic = {key: val for key, val in zip_longest(keys, values)}

print(dic)
# {'a': 1, 'b': 2, 'c': 3, None: 5}

あわせてどうぞ

zip()の基本から応用までは以下の記事にまとめています。