zip関数を使った複数シーケンスの結合処理

入門Python3 4.5.4


例えば二つのリストから一つの辞書を作成したい場合、以下のように処理を書く必要がありますが

ary1 = ["a","b","c"]
ary2 = [1,2,3]

hash = {}
for i in range(0,len(ary1)):
    hash[ary1[i]] = ary2[i]

print(hash)
$ py main.py
{'a': 1, 'b': 2, 'c': 3}

zip関数を使えば各リストの要素を一度のループで同時に取得しながら処理ができます。

上記と同じ処理をzipで再現してみます。

ary1 = ["a","b","c"]
ary2 = [1,2,3]

hash = {}
for a1,a2  in zip(ary1,ary2):
    hash[a1] = a2

print(hash)
$ py main.py
{'a': 1, 'b': 2, 'c': 3}

処理がすっきりしましたね。

ちなみにzipを使って辞書を生成するには、更にdistを使うと一発で出来ます。

まずdictというのは二次元リストを辞書に変換する関数です。

ary = [
    ["a",1],
    ["b",2],
    ["c",3],
]
print(dict(ary))
$ py main.py
{'a': 1, 'b': 2, 'c': 3}

zipの戻り値がまさにこの二次元リストのようなデータ構造になるのでdistとzipを組み合わせることで簡単に辞書を生成できるということになります。

ary1 = ["a","b","c"]
ary2 = [1,2,3]
hash = dict(zip(ary1,ary2))
print(hash)
$ py main.py
{'a': 1, 'b': 2, 'c': 3}

物凄くシンプルで良い処理ですね。今後も使っていくと思います。