【第4回】リストと辞書:コーヒーと釣りのログを「まとめて」扱う

Python入門

第3回では、

  • 変数に名前をつけること
  • 数値・文字列・真偽値といったデータ型
  • コーヒー1杯分、釣り1回分のログを「1件のデータ」として表現する

ところまで進みました。

ただ、実際の生活や趣味では、

  • コーヒーは毎日飲むかもしれないし
  • 釣りもシーズン中は何回も行く

わけで、「1件」では終わりません。

ノートであれば、ページをめくればよいのですが、Pythonの中では

「複数件のログを、ひとまとまりとして扱う」

ための仕組みが必要です。

そこで登場するのが

  • リスト(list)
  • 辞書(dict)

という2つのデータ構造です。

今回のゴールは、

「1件分のログ(辞書)を、複数まとめたリスト」として扱えるようになること。

これができると、
「今シーズンの釣りログ」「最近飲んだコーヒー一覧」といったものを、Pythonの中で組み立てられるようになります。

この回のゴールと全体像

この第4回で目指すのは、次の4つです。

  • リスト(list)のイメージと基本操作を理解する
  • 辞書(dict)のイメージと基本操作を理解する
  • 「1件分のログ」を辞書として表現できる
  • 複数のログを「辞書のリスト」としてまとめて扱える

最終的には、

  • コーヒーログのリスト
  • 釣りログのリスト

を作って、簡単な表示までやってみます。

リスト(list)とは? 順番付きの箱のならび

まずは リスト(list) から。
リストは、

「順番付きの、値のならび(配列)」

とイメージしてもらえればOKです。

例えば、最近飲んだコーヒーの名前を3つ並べたいとします。

リストを使わない場合(バラバラな変数)

coffee1 = "エチオピア浅煎り"
coffee2 = "グアテマラ中煎り"
coffee3 = "ケニア深煎り"

これでも間違いではありませんが、

件数が増えると管理が大変

まとめて処理しづらい

という弱点があります。

リストを使うと、ひとまとまりにできる

coffees = [
"エチオピア浅煎り",
"グアテマラ中煎り",
"ケニア深煎り"
]

[ と ] で囲んで、値をカンマ(,)で区切るだけです。
これで coffees という リスト に3つのコーヒー名が「順番つき」で入ります。

リストの中身を確認するには、print() をそのまま使ってOK。

print(coffees)

実行すると、こんな感じの表示になります。

['エチオピア浅煎り', 'グアテマラ中煎り', 'ケニア深煎り']

リストの基本操作 取り出す・長さを知る・追加する

インデックスで取り出す(0から始まる)

リストの中の要素には、「インデックス(index)」という番号が振られています。
0から始まる点だけ、最初はちょっと注意。

coffees = [
"エチオピア浅煎り", # インデックス 0
"グアテマラ中煎り", # インデックス 1
"ケニア深煎り" # インデックス 2
]

print(coffees[0]) # → "エチオピア浅煎り"
print(coffees[1]) # → "グアテマラ中煎り"
print(coffees[2]) # → "ケニア深煎り"

ターミナルで実行すると以下のように出力します。

要素数(長さ)を知る:len()

print(len(coffees)) # → 3

リスト内の要素数を取得して出力できます。

上記を実行すると以下のように要素は 3 と出力します。

最後に追加する:append()

coffees.append("コロンビア中深煎り")
print(coffees)

これで、リストの「最後に」新しいコーヒー(コロンビア中深煎り)が追加されます

辞書(dict)とは? ラベル付きの情報セット

次に、辞書(dictionary) です。
辞書は

「キー(名前)と値のペアを集めたもの」

です。

ノートの例で言うと、

  • 日付 → 2025/05/01
  • 場所 → 中禅寺湖
  • 魚種 → ブラウントラウト
  • サイズ → 52cm

という「ラベル:値」のセットをひとまとめにしたイメージです。

釣りの1回分を辞書で表現する

fishing_log = {
"date": "2025/05/01",
"lake": "中禅寺湖",
"fish_type": "ブラウントラウト",
"fish_length_cm": 52,
"weather": "くもり時々晴れ",
"wind": "南西の風",
"is_released": True
}

{} で囲み、

  • "date" のような「キー(名前)」
  • :(コロン)
  • "2025/05/01" のような「値」

をペアで書いていきます。

キーで取り出す・値を更新する

print(fishing_log["lake"]) # → "中禅寺湖"
print(fishing_log["fish_type"]) # → "ブラウントラウト"

# 値を更新
fishing_log["fish_length_cm"] = 55 # サイズを修正
print(fishing_log["fish_length_cm"]) # → 55

存在しないキーを指定するとエラーになるので、
慣れないうちはキー名のスペルに注意しましょう。
例えば、以下の場合だと正確には fish_length_cm ですが cn とタイポしているのでエラーになります。

「辞書のリスト」でログを複数管理する

ここからが、リストと辞書の本領発揮です。

  • 1件のログ:辞書(dict)
  • 複数件のログ:辞書のリスト(list of dict)

という形にすると、かなり現実的な「ログ管理」っぽくなります。

コーヒーログの例

coffee_logs = [
    {
        "date": "2025/05/01",
        "name": "エチオピア浅煎り",
        "roast": "浅煎り",
        "memo": "フルーティーで朝の湖に合う",
        "score": 4.5
    },
    {
        "date": "2025/05/02",
        "name": "グアテマラ中煎り",
        "roast": "中煎り",
        "memo": "ナッツのような香りで落ち着く",
        "score": 4.0
    },
    {
        "date": "2025/05/03",
        "name": "ケニア深煎り",
        "roast": "深煎り",
        "memo": "夜の読書に合うしっかりした苦味",
        "score": 4.2
    }
]

coffee_logs は「辞書が3つ入ったリスト」です。
1件ずつのログは、{...} で囲まれた辞書になっています。coffee_logs は「辞書が3つ入ったリスト」です。
1件ずつのログは、{...} で囲まれた辞書になっています。

1件ずつ表示してみる(軽く for 文)

for 文の詳しい説明は別回でやりますが、ここでは雰囲気だけ

for log in coffee_logs:
    print("日付:", log["date"])
    print("名前:", log["name"])
    print("焙煎度:", log["roast"])
    print("メモ:", log["memo"])
    print("スコア:", log["score"])
    print("----------------")

こうすると、リストの中のログを1件ずつ取り出して表示できます。
log には、1件分の辞書が順番に入ってきます。

実行すると次のように出力されます。

釣りログを「シーズンのリスト」にしてみる

同じように、釣りログも複数件をリストで管理してみましょう。

fishing_logs = [
    {
        "date": "2025/04/29",
        "lake": "中禅寺湖",
        "fish_type": "ブラウントラウト",
        "fish_length_cm": 48,
        "weather": "晴れ",
        "is_released": True
    },
    {
        "date": "2025/05/01",
        "lake": "中禅寺湖",
        "fish_type": "ブラウントラウト",
        "fish_length_cm": 52,
        "weather": "くもり時々晴れ",
        "is_released": True
    },
    {
        "date": "2025/05/05",
        "lake": "中禅寺湖",
        "fish_type": "レイクトラウト",
        "fish_length_cm": 60,
        "weather": "くもり",
        "is_released": False
    }
]

全件をざっと表示する

for log in fishing_logs:
    print("日付:", log["date"])
    print("場所:", log["lake"])
    print("魚種:", log["fish_type"])
    print("サイズ:", log["fish_length_cm"], "cm")
    print("天気:", log["weather"])
    print("リリース?:", log["is_released"])
    print("----------------")

ちょっとだけ「条件」を入れてみる(50cm以上だけ表示)

for 文とあわせて、少しだけ条件(if)も使ってみましょう。
(if 文そのものは別の回で詳しくやりますが、ここでは応用イメージとして。)

print("50cm以上の魚だけを表示")
print("========================")

for log in fishing_logs:
    if log["fish_length_cm"] >= 50:
        print("日付:", log["date"])
        print("魚種:", log["fish_type"])
        print("サイズ:", log["fish_length_cm"], "cm")
        print("----------------")

こうすると、

  • 「50cm以上」という条件を満たしたログだけ

を、絞り込んで表示できます。

ノートや記憶の中だけでは大変な「条件での振り返り」が、
Pythonだと一瞬でできる のが、こういう場面です。

今日のまとめ 「1件」から「一覧」へ

今回は、

  • リスト(list):順番付きの値のならび
  • 辞書(dict):キーと値のセット
  • 1件分のログ → 辞書
  • 複数件のログ → 辞書のリスト

という形で、コーヒーと釣りのログを「まとめて」扱う方法を見てきました。

ここまで来ると、Pythonの中で

  • 「今日の1件」を丁寧に記録しつつ
  • それを「シーズン全体」「最近1週間」といった視点で振り返る

という、データとしての趣味ログ が少し見えてきたはずです。

次回予告 if文とfor文で「条件」と「繰り返し」を丁寧に

この記事では、

  • for log in fishing_logs:
  • if log["fish_length_cm"] >= 50:

といった書き方がさらっと出てきました。

次回は、

  • if文(条件分岐)
  • for文(繰り返し)

を、コーヒー・釣りログを題材にしながら、もう少し丁寧に解説していきます。

例えば、

  • 「エチオピアのコーヒーだけを表示する」
  • 「リリースした魚だけを集計する」

といったことを、コードで自然に書けるようになるのが次のステップです。

引き続き、湖・コーヒー・星空のそばで、ゆっくりPythonを育てていきましょう。

コメント