Pythonの型ヒント:リスト(list)や辞書(dict)の中身まで型を指定する方法

Pythonでリスト(list)や辞書(dict)といったコレクション型の変数を定義する際、単に items: list と型ヒントを書くだけでは不十分な場合があります。

「リストであることは分かるが、その中身は数値なのか文字列なのか?」という情報がないと、要素を取り出した後の処理でエラーが発生するリスクがあるためです。

この記事では、リストや辞書の中身(要素の型)まで詳細に指定する方法について解説します。

目次

1. リストの型ヒント

リストの中身の型を指定するには、list[要素の型] という形式で記述します。

具体的なコード例

例として、1週間の「気温データ」を管理するリストを定義します。気温は小数(float)です。

# Python 3.9以降の記法
# 「小数のリスト」であることを明示
daily_temperatures: list[float] = [25.5, 26.0, 24.8, 23.5, 27.2]

# 文字列のリストの例
task_list: list[str] = ["メール確認", "日報作成", "ミーティング"]

このように書くことで、daily_temperatures に文字列を追加しようとしたり、task_list の要素を数値として計算しようとしたりすると、エディタや静的解析ツールが警告を出してくれます。

補足: Python 3.8以前の場合 Python 3.9からは標準の list をそのまま使えますが、3.8以前の環境では typing モジュールから List をインポートして使用する必要があります(頭文字が大文字です)。

Python

from typing import List
daily_temperatures: List[float] = [25.5, 26.0]

2. 辞書の型ヒント

辞書の場合は、キーと値それぞれの型を指定する必要があります。dict[キーの型, 値の型] という形式で記述します。

具体的なコード例

カフェの「メニュー価格表」を辞書で定義します。キーはメニュー名(文字列)、値は価格(整数)です。

# キーが str、値が int の辞書
menu_prices: dict[str, int] = {
    "Coffee": 400,
    "Tea": 450,
    "Sandwich": 600
}

# キーが str、値が float の辞書(例: 各科目の平均点)
average_scores: dict[str, float] = {
    "Math": 78.5,
    "English": 82.0
}

補足: Python 3.8以前の場合 リストと同様に、古いバージョンでは typing モジュールの Dict を使用します。

Python

from typing import Dict
menu_prices: Dict[str, int] = {"Coffee": 400}

3. 関数の引数と戻り値での利用

この機能が最も役立つのは、関数の定義です。引数として受け取るリストの中身が何であるかが明確になるため、関数内部の実装が安全になります。

例として、気温のリストを受け取り、平均気温を計算して返す関数を作成します。

def calculate_average_temp(temperatures: list[float]) -> float:
    """
    気温のリストを受け取り、平均値を返す関数
    """
    if not temperatures:
        return 0.0
    
    total = sum(temperatures)
    return total / len(temperatures)

# --- 実行 ---
week_data = [25.5, 26.0, 24.8]

# 正しい型で呼び出し
average = calculate_average_temp(week_data)
print(f"平均気温: {average:.1f}度")

実行結果:

平均気温: 25.4度

もし calculate_average_temp(["晴れ", "曇り"]) のように文字列のリストを渡そうとすれば、実行前に「型が一致しません」という警告を得ることができます。

4. 複数の型が混在する場合 (Union)

リストの中に整数と文字列が混ざっている場合など、複数の型を許容したい場合は Union(またはPython 3.10以降の |)を使用します。

from typing import Union

# 整数または文字列が入るリスト
# IDなどが混在する場合を想定
mixed_ids: list[Union[int, str]] = [101, "A-202", 305, "B-404"]

# Python 3.10以降ならこう書ける
# mixed_ids: list[int | str] = [101, "A-202", 305, "B-404"]

まとめ

  • リストの型ヒントは list[int] のように記述し、中身の型を明示します。
  • 辞書の型ヒントは dict[str, int] のように、キーと値の型を記述します。
  • これらを使うことで、コレクションの中身に対する誤操作(数値だと思って計算したら文字列だった、など)を未然に防ぐことができます。
  • Python 3.9以降では標準の list, dict を使い、それ以前では typing.List, typing.Dict を使います。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次