Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

なぜPythonで「辞書のリスト」が使われる? への回答

f:id:kenken0326:20191210110720p:plain

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},
]

ここでのポイント

  1. A、B、Cという「列」の名前を辞書の「キー」にしている
  2. 表データの行数が、リストの中身(辞書)の数になる
  3. 各行の値(上記の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.jp

ぜひ、PyQでPythonのデータ構造をかしこく使う方法を学んで、よりプログラムを明解に書けるようになりましょう。

Copyright ©2017-2020 BeProud Inc. All rights reserved.