id:hirokikyです。
今日はお客様からよくいただく、Pythonのデータ構造に関する質問を解説します。
質問: なぜPythonで「辞書のリスト」が使われる?
なぜPythonで辞書のリスト [{キー1:データ1, ...}, ...] がよく使われるのでしょうか? どういった場合にこのデータを使うと良いのでしょうか?
回答
はい。Pythonのプログラム中では「辞書のリスト」はよく使われます。 辞書のリストは、以下のようなデータを表す際に使えます。
- 「表」(テーブル)のようなデータ
- CSVやデータベースから読み込んだデータ
また、Pythonだけでなく他のプログラミング言語(例えばJavaScript)でも同じように活用できます。
Pythonで辞書のリストを活用する
Pythonの辞書のリストは、「表データ」(テーブル)を表すときに使うと良いでしょう。
CSVやデータベース、Excelはすべて表データです。表データの扱い方を知っておけば、日常よくあるデータを上手に扱えます。
例えば以下に、A、B、Cの3つの列(カラム、タイトル)がある表データを考えます。
データとしては「1、2、3」と「7、8、9」の2行(2つのデータ)があります。
A B C ------- 1 2 3 7 8 9
この表データは以下のようなPythonの「辞書のリスト」で表せます。
data = [ {"A": 1, "B": 2, "C": 3}, {"A": 7, "B": 8, "C": 9}, ]
ここでのポイント
- A、B、Cという「列」の名前を辞書の「キー」にしている
- 表データの行数が、リストの中身(辞書)の数になる
- 各行の値(上記の1、2、3のような値)が、各辞書の「値」になる
辞書のリストを使うと、表データを1行1行処理するPythonプログラムを簡単に実装できます。
for row in data: print(row["B"]) # B列の値を表示 print(row["A"] * row["C"]) # A列とC列の値を掛け算して表示
なぜPythonの「リストのリスト」ではダメなのか?
もちろん表データをPythonの「リストのリスト」でも表現できますが、少し扱いにくいデータになります。
先程の表データを「リストのリスト」で表現してみましょう。
data = [ [1, 2, 3], [7, 8, 9], ]
このデータを使ってPythonプログラムを書くと、「リストの何番目に、どの列の値が入っているか」を考える必要があります。
for row in data: print(row[1]) # B列の値を表示 print(row[0] * row[2]) # A列とC列の値を掛け算して表示
1列目の値 row[0]
が、Aの値であると知っておく必要があります。
また、列の順番が変わったときに動作しなくなる問題もあります。
ですので、表データを表す際は「リストのリスト」よりも「辞書のリスト」のほうが扱いやすくなります。
実世界でのPythonプログラム例
例えばExcelで書くようなデータは全てこの辞書のリストで表せます。
以下のような身長と体重のようなデータも辞書のリストで表現できます。
名前 身長 体重 ------------------- 清原 162 45 佐藤 170 65 ...
この表を「辞書のリスト」で表すと、以下のようにループで1行1行処理するPythonプログラムを書けます。
data = [ {"名前": "清原", "身長": 162, "体重": 45}, {"名前": "佐藤", "身長": 170, "体重": 65}, ] for account in data: print("名前は", account["名前"]) print("身長は", account["身長"]) print("体重は", account["体重"]) print("BMIは", account["体重"] / (account["身長"] / 100) ** 2)
まとめ
Pythonで「辞書のリスト」は表データ(テーブル)を表すのに有効です。
表データを1行1行処理するときに扱いやすいデータです。
また、表データは日常の業務でもよく使われるので、活用の幅はとても広いでしょう。
ここから発展して、Pythonの「辞書のリスト」を「辞書の辞書」のデータに変換することもあります。
その扱い方や活用方法は、PyQの「設計」クエストで説明しています。
PyQではPythonのデータ構造の扱い方や、プログラムの設計方法まで深く学べます。
ぜひ、PyQでPythonのデータ構造をかしこく使う方法を学んで、よりプログラムを明解に書けるようになりましょう。