エラノート エラノート

Python入門|リストと辞書の使い方を基礎から解説

Python リスト 辞書 データ構造 入門
広告スペース (article-top)

Pythonで複数のデータをまとめて扱うには、「リスト」と「辞書」を使います。どちらもプログラミングの基本中の基本であり、家計簿アプリやToDoリストなど、あらゆるプログラムで登場します。この記事では、リストと辞書の使い方を具体的なコード例とともに解説します。

リストの基本

リストは、複数のデータを順番に並べて格納するデータ構造です。買い物リストや成績一覧のように、「順序のあるデータの集まり」を扱うときに使います。

リストの作成

リストは角括弧 [] で作成します。中にはどんな型のデータでも入れられます。

# 文字列のリスト
fruits = ["りんご", "バナナ", "みかん"]
print(fruits)  # ['りんご', 'バナナ', 'みかん']

# 数値のリスト
scores = [85, 92, 78, 95, 88]
print(scores)  # [85, 92, 78, 95, 88]

# 空のリスト
empty_list = []
print(empty_list)  # []

リストの要素にアクセスする

リストの各要素には「インデックス」という番号でアクセスします。インデックスは0から始まる点に注意してください。

fruits = ["りんご", "バナナ", "みかん", "ぶどう"]

# 先頭の要素(インデックス0)
print(fruits[0])  # りんご

# 3番目の要素(インデックス2)
print(fruits[2])  # みかん

# 末尾の要素(マイナスで後ろから数える)
print(fruits[-1])  # ぶどう

# スライスで範囲を取得
print(fruits[1:3])  # ['バナナ', 'みかん']

リストの要素数を調べる

len() 関数でリストの要素数を取得できます。

tasks = ["買い物", "掃除", "洗濯", "料理"]
print(len(tasks))  # 4

リストの追加・変更・削除

リストは作成した後からでも自由に中身を変更できます。これを「ミュータブル(変更可能)」と呼びます。

要素の追加

# 買い物リストを作る
shopping = ["牛乳", "卵"]

# 末尾に追加
shopping.append("パン")
print(shopping)  # ['牛乳', '卵', 'パン']

# 指定位置に挿入
shopping.insert(1, "バター")
print(shopping)  # ['牛乳', 'バター', '卵', 'パン']

# 複数の要素を一度に追加
shopping.extend(["豆腐", "納豆"])
print(shopping)  # ['牛乳', 'バター', '卵', 'パン', '豆腐', '納豆']

要素の変更と削除

colors = ["赤", "青", "黄", "緑"]

# 要素の変更
colors[1] = "水色"
print(colors)  # ['赤', '水色', '黄', '緑']

# 値を指定して削除
colors.remove("黄")
print(colors)  # ['赤', '水色', '緑']

# インデックスを指定して削除
deleted = colors.pop(0)
print(deleted)  # 赤
print(colors)   # ['水色', '緑']

リストのループ処理

リストの全要素に対して同じ処理を行いたい場合は、for文を使います。

for文で要素を処理する

# ToDoリストの各タスクを表示
tasks = ["メール確認", "報告書作成", "ミーティング", "資料準備"]

for task in tasks:
    print(f"- {task}")

実行結果:

- メール確認
- 報告書作成
- ミーティング
- 資料準備

enumerate()でインデックスと要素を同時に取得

members = ["田中", "佐藤", "鈴木", "高橋"]

for i, name in enumerate(members, start=1):
    print(f"{i}番: {name}")

実行結果:

1番: 田中
2番: 佐藤
3番: 鈴木
4番: 高橋

リスト内包表記

リスト内包表記を使うと、for文を1行で書くことができます。新しいリストを作りたいときに便利です。

# 1から10までの偶数の2乗を求める
even_squares = [x ** 2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

# 文字列リストをすべて大文字に変換
words = ["hello", "world", "python"]
upper_words = [w.upper() for w in words]
print(upper_words)  # ['HELLO', 'WORLD', 'PYTHON']

通常のfor文と比べてコードが短くなりますが、処理が複雑な場合は通常のfor文の方が読みやすくなります。無理にリスト内包表記を使う必要はありません。

辞書の基本

辞書は「キー」と「値」のペアでデータを管理するデータ構造です。名前と電話番号、商品名と価格のように、「ラベル付きのデータ」を扱うときに使います。

辞書の作成

辞書は波括弧 {} で作成し、キー: 値 の形式で要素を並べます。

# ユーザー情報を辞書で管理
user = {
    "name": "田中太郎",
    "age": 28,
    "city": "東京"
}
print(user)  # {'name': '田中太郎', 'age': 28, 'city': '東京'}

# 値の取得
print(user["name"])  # 田中太郎

安全に値を取得する

存在しないキーを指定するとエラーになります。get() メソッドを使うと、キーが存在しない場合にデフォルト値を返すことができます。

user = {"name": "田中太郎", "age": 28}

# get()で安全に取得(キーがなければNoneを返す)
print(user.get("city"))         # None
print(user.get("city", "不明"))  # 不明

# キーの存在確認
if "name" in user:
    print(f"名前: {user['name']}")

辞書の追加・変更・削除

辞書もリストと同様に、後から内容を変更できます。

要素の追加と更新

# 商品の在庫管理
stock = {"りんご": 10, "バナナ": 5}

# 新しいキーで追加
stock["みかん"] = 8
print(stock)  # {'りんご': 10, 'バナナ': 5, 'みかん': 8}

# 既存のキーで値を更新
stock["りんご"] = 15
print(stock)  # {'りんご': 15, 'バナナ': 5, 'みかん': 8}

# 複数のキーを一度に更新
stock.update({"バナナ": 3, "ぶどう": 12})
print(stock)  # {'りんご': 15, 'バナナ': 3, 'みかん': 8, 'ぶどう': 12}

要素の削除

stock = {"りんご": 15, "バナナ": 3, "みかん": 8}

# 指定したキーを削除
del stock["バナナ"]
print(stock)  # {'りんご': 15, 'みかん': 8}

# pop()で削除しつつ値を取得
removed = stock.pop("みかん")
print(removed)  # 8
print(stock)    # {'りんご': 15}

辞書のループ処理

辞書の全要素を処理するには、いくつかの方法があります。用途に応じて使い分けましょう。

キーと値をループする

# 家計簿データ
expenses = {
    "食費": 35000,
    "光熱費": 12000,
    "通信費": 8000,
    "交通費": 5000
}

# キーと値を同時に取得
for category, amount in expenses.items():
    print(f"{category}: {amount:,}円")

# 合計を計算
total = sum(expenses.values())
print(f"合計: {total:,}円")

実行結果:

食費: 35,000円
光熱費: 12,000円
通信費: 8,000円
交通費: 5,000円
合計: 60,000円

辞書のソート

scores = {"国語": 78, "数学": 92, "英語": 85, "理科": 88}

# 値の大きい順に並べ替え
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
for subject, score in sorted_scores:
    print(f"{subject}: {score}点")

実行結果:

数学: 92点
理科: 88点
英語: 85点
国語: 78点

リストと辞書を組み合わせる

実際のプログラムでは、リストと辞書を組み合わせてデータを管理することがよくあります。

辞書のリスト

# 社員データを辞書のリストで管理
employees = [
    {"name": "田中", "department": "営業", "salary": 300000},
    {"name": "佐藤", "department": "開発", "salary": 350000},
    {"name": "鈴木", "department": "営業", "salary": 280000},
    {"name": "高橋", "department": "開発", "salary": 320000},
]

# 開発部の社員だけ抽出
dev_members = [e for e in employees if e["department"] == "開発"]
for member in dev_members:
    print(f"{member['name']} - {member['salary']:,}円")

# 全社員の平均給与を計算
avg_salary = sum(e["salary"] for e in employees) / len(employees)
print(f"平均給与: {avg_salary:,.0f}円")

実行結果:

佐藤 - 350,000円
高橋 - 320,000円
平均給与: 312,500円

実践例: 簡易家計簿

# 支出データ
records = [
    {"date": "4/1", "category": "食費", "amount": 1200},
    {"date": "4/1", "category": "交通費", "amount": 500},
    {"date": "4/2", "category": "食費", "amount": 800},
    {"date": "4/2", "category": "日用品", "amount": 2000},
    {"date": "4/3", "category": "食費", "amount": 1500},
]

# カテゴリ別に集計
summary = {}
for record in records:
    cat = record["category"]
    summary[cat] = summary.get(cat, 0) + record["amount"]

print("--- カテゴリ別支出 ---")
for cat, total in summary.items():
    print(f"{cat}: {total:,}円")

まとめ

この記事では、Pythonのリストと辞書の基本操作を解説しました。

  • リストは順序のあるデータの集まりを扱う。append()remove()pop() で操作する
  • 辞書はキーと値のペアでデータを管理する。get() で安全に値を取得できる
  • for文や items() を使ってリスト・辞書の全要素を処理できる
  • リスト内包表記で簡潔に新しいリストを作成できる
  • リストと辞書を組み合わせることで、複雑なデータも管理できる

まずは買い物リストや家計簿など身近なデータを使って、リストと辞書の操作を実際に試してみてください。手を動かすことが上達への近道です。

広告スペース (article-bottom)

あわせて読みたい