2つの配列から辞書(dict)型に変換するワンライナー | Python
2つの配列から辞書(dict)型に変換するワンライナーを思いついたので紹介します。 zip()と辞書型のリスト内法表記を使って書きます。
動作確認:Python 3.7
2つの配列から辞書(dict)型に変換するワンライナー
keys
とvalues
の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}
配列長が長い方に合わせたいときは、itertools
のzip_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()
の基本から応用までは以下の記事にまとめています。
