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を使います。
