PYTHON MEBY

Pythonで辞書の値の型を変換(辞書内包表記)

この記事では、Pythonの辞書内包表記を使って辞書の値の型を一括変換する方法を説明します。様々な型変換の例と、エラー処理についても解説します。

目次

辞書内包表記による型変換の基本

Pythonの辞書内包表記は、既存の辞書から新しい辞書を作成する簡潔な方法です。値の型変換も辞書内包表記で効率的に行えます。基本的な構文は次のとおりです。

original_dict = {"a": 1, "b": 2, "c": 3}
new_dict = {k: v * 2 for k, v in original_dict.items()}
print(new_dict)

上記の例では、元の辞書の値をすべて2倍にしています。`v * 2`の部分を任意の型変換式に置き換えることで、様々な型変換を実現できます。

数値型への変換

文字列で表現された数値を整数型や浮動小数点型に変換できます。

original_dict = {"a": "10", "b": "20.5", "c": "30"}
new_dict = {k: int(v) for k, v in original_dict.items()}
print(new_dict)

new_dict = {k: float(v) for k, v in original_dict.items()}
print(new_dict)

`int()`関数と`float()`関数を用いて、それぞれ整数型と浮動小数点型に変換しています。変換できない文字列が含まれるとエラーが発生するので注意が必要です。

文字列型への変換

数値やその他の型を文字列型に変換できます。

original_dict = {"a": 10, "b": 20.5, "c": True}
new_dict = {k: str(v) for k, v in original_dict.items()}
print(new_dict)

`str()`関数を用いて、様々な型を文字列に変換します。

日付型への変換

文字列型の日付を日付型に変換できます。`datetime`モジュールを使用します。

from datetime import datetime
original_dict = {"a": "2024-01-20", "b": "2024-02-15"}
new_dict = {k: datetime.strptime(v, "%Y-%m-%d") for k, v in original_dict.items()}
print(new_dict)

`strptime()`メソッドを用いて、指定したフォーマットの文字列を`datetime`オブジェクトに変換します。

リスト型への変換

文字列をリストに変換したり、リストの要素の型を変換したりできます。

original_dict = {"a": "apple,banana,orange", "b": [1,2,3]}
new_dict = {k: v.split(",") if isinstance(v, str) else [str(x) for x in v] for k, v in original_dict.items()}
print(new_dict)

条件分岐を用いて、文字列の場合は`split()`でリスト化し、リストの場合は要素を文字列に変換しています。

エラー処理と例外処理

型変換に失敗する可能性のある値が含まれる場合、`try-except`ブロックでエラー処理を行う必要があります。

original_dict = {"a": "10", "b": "abc", "c": "30"}
new_dict = {}
for k, v in original_dict.items():
    try:
        new_dict[k] = int(v)
    except ValueError:
        print(f"値 '{v}' の変換に失敗しました。")
print(new_dict)

`ValueError`例外をキャッチし、エラーメッセージを表示します。

実践例

複数の型変換を組み合わせた実践的な例です。

original_dict = {"name": "John Doe", "age": "30", "scores": ["85", "92", "78"]}
new_dict = {"name": original_dict["name"], "age": int(original_dict["age"]), "scores": [int(x) for x in original_dict["scores"]]}
print(new_dict)

名前はそのまま、年齢は整数型に、点数は整数型のリストに変換しています。

関連記事