Pythonにおいて、キー(Key)となるリストと、それに対応する値(Value)となるリストが別々に存在する場合、これらを結合して一つの辞書(ディクショナリ)を作成するには zip() 関数を使用するのが最も一般的でスマートな方法です。
for文でループを回して追加する必要はなく、組み込み関数だけで簡潔に変換処理を実装できます。
目次
実装例:通貨コードと記号のマッピング
ここでは、通貨コード(USD, JPYなど)のリストと、それに対応する通貨記号($, ¥など)のリストから、検索用の辞書を作成するシナリオを実装します。
ソースコード
# キーとなるリスト(通貨コード)
currency_codes = ["USD", "EUR", "JPY", "GBP"]
# 値となるリスト(通貨記号)
currency_symbols = ["$", "€", "¥", "£"]
# 1. zip() 関数で2つのリストをペア(タプル)のイテレータに変換
# 2. dict() コンストラクタに渡して辞書化
currency_map = dict(zip(currency_codes, currency_symbols))
# 結果の出力
print("--- 通貨マッピング辞書 ---")
print(currency_map)
# 生成された辞書を使ってアクセスする例
target_code = "JPY"
if target_code in currency_map:
print(f"\n{target_code} の記号は {currency_map[target_code]} です。")
実行結果
--- 通貨マッピング辞書 ---
{'USD': '$', 'EUR': '€', 'JPY': '¥', 'GBP': '£'}
JPY の記号は ¥ です。
解説
zip関数の役割
zip(list_a, list_b) は、それぞれのリストの同じインデックスにある要素を取り出し、タプルのペア (a[0], b[0]), (a[1], b[1]), ... を順次生成するイテレータを返します。
dictコンストラクタとの連携
dict() コンストラクタは、(キー, 値) という形式のタプルを含むイテラブル(リストやzipオブジェクトなど)を受け取ると、それを自動的に辞書に変換します。この2つを組み合わせることで dict(zip(keys, values)) というイディオムが成立します。
注意点:要素数が異なる場合
2つのリストの長さ(要素数)が異なる場合、zip() は短い方のリストに合わせて終了します。余った要素は無視されるため、データの欠落を防ぎたい場合は事前にリストの長さを確認するか、itertools.zip_longest の使用を検討してください。
