Pythonのコレクションをマスター!リスト・辞書の基本から応用まで徹底解説
PythonをコマンドプロンプトやPowerShellでPC上で動かすには、Pythonをダウンロードしてインストールする必要があります。
まだの方はPythonのインストールと開発環境の構築の記事を参考にして、Pythonをインストールしてください。
Webサイト制作やアプリケーション開発で、複数のデータを効率的に扱いたい場面はたくさんありますよね。例えば、ブログ記事の一覧、ECサイトの商品リスト、ユーザー情報など、これらはすべて「データの集まり」です。Pythonには、こうしたデータの集まりをスマートに管理するための強力な仕組み、「コレクション」が用意されています。
この記事では、Pythonのコレクションの中でも特に重要な「リスト」と「辞書」を中心に、Webクリエーター初心者の方でもすぐに使えるように、コピペで動くコード例を豊富に交えながら、その基本から応用までを分かりやすく解説します。さあ、一緒に「動く」を体験しながら、データ操作のスキルをレベルアップさせましょう!
1. データを順番に並べる「リスト」
まず最初に学ぶのが「リスト」です。リストは、複数のデータを順番に並べて格納できる、最も基本的なコレクションです。名前の通り、買い物リストやToDoリストのように、順番が意味を持つデータを扱うのに最適です。Web制作では、ナビゲーションメニューの項目、ブログ記事のタグ一覧、画像ギャラリーのファイル名リストなどを管理するのに役立ちます。
リストの作り方
リストを作るのはとても簡単。角括弧 [] で囲み、各データをカンマ , で区切って並べるだけです。数値、文字列、さらにはリストの中にリストを入れることも可能です。
# 文字列のリストを作成
fruits = ["りんご", "バナナ", "みかん"]
print(fruits)
# 数値のリストを作成
numbers = [1, 2, 3, 4, 5]
print(numbers)
# 異なるデータ型を混ぜることも可能
mixed_list = [1, "こんにちは", True, 3.14]
print(mixed_list)
実行結果:
['りんご', 'バナナ', 'みかん']
[1, 2, 3, 4, 5]
[1, 'こんにちは', True, 3.14]
要素へのアクセス(インデックス)
リストの中の特定のデータ(要素)を取り出すには、「インデックス」という番号を使います。注意点は、インデックスは0から始まることです。最初の要素は [0]、2番目は [1] となります。
fruits = ["りんご", "バナナ", "みかん"]
# 最初の要素を取得 (インデックスは0)
first_fruit = fruits[0]
print(f"最初の果物: {first_fruit}")
# 3番目の要素を取得 (インデックスは2)
third_fruit = fruits[2]
print(f"3番目の果物: {third_fruit}")
実行結果:
最初の果物: りんご
3番目の果物: みかん
要素の追加 (append)
リストの末尾に新しい要素を追加するには、append() メソッドを使います。これは、新しいブログ記事をリストの最後に追加するようなイメージです。
fruits = ["りんご", "バナナ", "みかん"]
print(f"追加前: {fruits}")
# リストの末尾に "ぶどう" を追加
fruits.append("ぶどう")
print(f"追加後: {fruits}")
実行結果:
追加前: ['りんご', 'バナナ', 'みかん']
追加後: ['りんご', 'バナナ', 'みかん', 'ぶどう']
要素の変更
インデックスを指定して、既存の要素を新しい値に書き換えることもできます。
fruits = ["りんご", "バナナ", "みかん"]
print(f"変更前: {fruits}")
# 2番目の要素 (インデックス1) を "キウイ" に変更
fruits[1] = "キウイ"
print(f"変更後: {fruits}")
実行結果:
変更前: ['りんご', 'バナナ', 'みかん']
変更後: ['りんご', 'キウイ', 'みかん']
要素の削除 (del)
インデックスを指定して要素を削除するには、del 文を使います。
fruits = ["りんご", "バナナ", "みかん", "ぶどう"]
print(f"削除前: {fruits}")
# 3番目の要素 (インデックス2) を削除
del fruits[2]
print(f"削除後: {fruits}")
実行結果:
削除前: ['りんご', 'バナナ', 'みかん', 'ぶどう']
削除後: ['りんご', 'バナナ', 'ぶどう']
リストの長さを調べる (len)
リストにいくつの要素が入っているかを知るには、len() 関数が便利です。ブログ記事の総数を表示する、といった使い方ができます。
fruits = ["りんご", "バナナ", "みかん", "ぶどう"]
item_count = len(fruits)
print(f"リストの中には {item_count} 個の要素があります。")
実行結果:
リストの中には 4 個の要素があります。
2. キーと値で管理する「辞書」
次に紹介する「辞書(ディクショナリ)」は、Web開発で非常によく使われる、極めて強力なデータ構造です。リストが番号(インデックス)でデータを管理するのに対し、辞書は「キー」と呼ばれる名前と、それに対応する「値(バリュー)」をペアで管理します。
これは、人名(キー)と電話番号(値)がペアになった電話帳のようなものです。順番は気にせず、「このキーに対応する値は何か?」を素早く知りたい場合に最適です。Webサイトの会員情報(ユーザー名: "Taro", 年齢: 25...)や、設定情報(theme_color: "#333", font_size: "16px"...)などを管理するのにピッタリです。
辞書の作り方
辞書は波括弧 {} を使い、キー: 値 のペアをカンマ , で区切って記述します。キーには通常、文字列が使われます。
# ユーザー情報を辞書で作成
user = {
"name": "山田 太郎",
"age": 30,
"email": "yamada@example.com",
"is_admin": False
}
print(user)
実行結果:
{'name': '山田 太郎', 'age': 30, 'email': 'yamada@example.com', 'is_admin': False}
値へのアクセス(キー)
辞書から値を取り出すには、リストのインデックスの代わりに「キー」を使います。辞書名[キー] のように記述します。
user = {
"name": "山田 太郎",
"age": 30,
"email": "yamada@example.com"
}
# "name" キーに対応する値を取得
user_name = user["name"]
print(f"ユーザー名: {user_name}")
# "age" キーに対応する値を取得
user_age = user["age"]
print(f"年齢: {user_age}")
実行結果:
ユーザー名: 山田 太郎
年齢: 30
値の追加と更新
辞書に新しいキーと値のペアを追加したり、既存のキーの値を更新したりするのは簡単です。新しいキーを指定して代入すれば追加、既存のキーを指定すれば更新になります。
user = {
"name": "山田 太郎",
"age": 30
}
print(f"操作前: {user}")
# 新しいキー "city" を追加
user["city"] = "東京"
print(f"追加後: {user}")
# 既存のキー "age" の値を更新
user["age"] = 31
print(f"更新後: {user}")
実行結果:
操作前: {'name': '山田 太郎', 'age': 30}
追加後: {'name': '山田 太郎', 'age': 30, 'city': '東京'}
更新後: {'name': '山田 太郎', 'age': 31, 'city': '東京'}
要素の削除 (del)
リストと同様に、del 文とキーを指定することで、特定のキーと値のペアを削除できます。
user = {
"name": "山田 太郎",
"age": 30,
"email": "yamada@example.com"
}
print(f"削除前: {user}")
# "email" キーとそれに対応する値を削除
del user["email"]
print(f"削除後: {user}")
実行結果:
削除前: {'name': '山田 太郎', 'age': 30, 'email': 'yamada@example.com'}
削除後: {'name': '山田 太郎', 'age': 30}
キーや値の一覧を取得する
辞書にどんなキーがあるか、どんな値があるかを一覧で取得したい場合は、keys(), values(), items() といったメソッドが役立ちます。
user = {
"name": "山田 太郎",
"age": 30,
"city": "東京"
}
# すべてのキーを取得
print(f"キーの一覧: {user.keys()}")
# すべての値を取得
print(f"値の一覧: {user.values()}")
# すべてのキーと値のペアをタプルのリストとして取得
print(f"キーと値のペア: {user.items()}")
実行結果:
キーの一覧: dict_keys(['name', 'age', 'city'])
値の一覧: dict_values(['山田 太郎', 30, '東京'])
キーと値のペア: dict_items([('name', '山田 太郎'), ('age', 30), ('city', '東京')])
3. 応用編:Pythonで動的な商品リストページを生成しよう!
ここまで学んだリストと辞書を組み合わせると、非常に実用的な処理ができます。ここでは、ECサイトの商品リストをPythonで管理し、それを元にHTMLを自動生成する例を見てみましょう。これは、Webフレームワーク(DjangoやFlaskなど)が内部で行っていることの基礎となる考え方です。
まず、商品データを「辞書のリスト」としてPythonで定義します。各商品が1つの辞書で、その中に商品名、価格、画像ファイル名などの情報が入っています。
<!-- このコードは、Webサーバー上で実行され、下のHTMLを生成するPythonコードの例です -->
#
# import html
#
# # 商品データのリスト(各商品が辞書)
# products = [
# {
# "name": "オーガニックコットンTシャツ",
# "price": 4500,
# "image": "tshirt.jpg",
# "description": "肌触りの良いオーガニックコットン100%のTシャツです。"
# },
# {
# "name": "キャンバススニーカー",
# "price": 8200,
# "image": "sneakers.jpg",
# "description": "どんなスタイルにも合わせやすい、定番のキャンバススニーカー。"
# },
# {
# "name": "レザーバックパック",
# "price": 19800,
# "image": "backpack.jpg",
# "description": "使い込むほどに味が出る、本革仕様のバックパック。"
# }
# ]
#
# # HTMLを生成
# html_content = ""
# for product in products:
# # HTMLエスケープを忘れずに
# name_esc = html.escape(product["name"])
# desc_esc = html.escape(product["description"])
# img_esc = html.escape(product["image"])
#
# html_content += f"""
# <div class="product-card">
# <img src="images/{img_esc}" alt="{name_esc}">
# <h3>{name_esc}</h3>
# <p class="price">¥{product['price']:,}</p>
# <p>{desc_esc}</p>
# </div>
# """
#
# # この html_content をファイルに書き出したり、Webフレームワークのテンプレートに渡したりする
# # print(html_content)
#
上記のPythonコードを実行すると、次のようなHTMLコードが生成されます。これをブラウザで開けば、商品リストが表示されるわけです。この「データと見た目を分離する」という考え方は、効率的なWeb制作の鍵となります。
👇まるっと動く完全HTMLの例👇
以下のコードをコピーして、products.html のような名前で保存し、ブラウザで開いてみてください。(※画像は表示されませんが、レイアウトは確認できます)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>商品リスト</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background-color: #f4f7f6;
color: #333;
margin: 0;
padding: 2rem;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
text-align: center;
color: #2c3e50;
margin-bottom: 2rem;
}
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.product-card {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
overflow: hidden;
transition: transform 0.3s, box-shadow 0.3s;
}
.product-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}
.product-card img {
width: 100%;
height: 200px;
object-fit: cover;
background-color: #eee;
}
.product-card h3 {
font-size: 1.25rem;
margin: 1rem 1.5rem 0.5rem;
color: #34495e;
}
.product-card .price {
font-size: 1.2rem;
font-weight: bold;
color: #e74c3c;
margin: 0 1.5rem;
}
.product-card p {
font-size: 0.95rem;
line-height: 1.6;
margin: 0.5rem 1.5rem 1.5rem;
color: #7f8c8d;
}
</style>
</head>
<body>
<div class="container">
<h1>おすすめ商品</h1>
<div class="product-grid">
<div class="product-card">
<img src="images/tshirt.jpg" alt="オーガニックコットンTシャツ">
<h3>オーガニックコットンTシャツ</h3>
<p class="price">¥4,500</p>
<p>肌触りの良いオーガニックコットン100%のTシャツです。</p>
</div>
<div class="product-card">
<img src="images/sneakers.jpg" alt="キャンバススニーカー">
<h3>キャンバススニーカー</h3>
<p class="price">¥8,200</p>
<p>どんなスタイルにも合わせやすい、定番のキャンバススニーカー。</p>
</div>
<div class="product-card">
<img src="images/backpack.jpg" alt="レザーバックパック">
<h3>レザーバックパック</h3>
<p class="price">¥19,800</p>
<p>使い込むほどに味が出る、本革仕様のバックパック。</p>
</div>
</div>
</div>
</body>
</html>
4. 知っておくと差がつく!注意点と使い分け
リストと辞書は非常に便利ですが、いくつか知っておくべき注意点があります。これらを理解すると、より高度なプログラミングや予期せぬエラーの回避に繋がります。
リスト vs 辞書:どう使い分ける?
-
リストを使う場面:
- データの「順番」が重要なとき(例:ランキング、ステップ・バイ・ステップの手順)
- 単純なデータの集まりを管理したいとき(例:タグのリスト、ユーザー名のリスト)
-
辞書を使う場面:
- 各データが特定の「意味」や「名前」を持つとき(例:'name'というキーに名前、'age'に年齢)
- 特定のキーを使って、対応する値へ高速にアクセスしたいとき
Webサイトのコンテンツでも、ナビゲーションメニューの項目は順番が重要なのでリスト、サイト全体の設定項目は「キー」で管理したいので辞書、というように自然と使い分けられます。
リストの「コピー」に注意!
これは初心者が陥りがちな罠の一つです。リストを単純に = で別の変数に代入すると、リストそのものがコピーされるのではなく、「リストの場所(参照)」がコピーされます。その結果、片方を変更するともう片方も変わってしまいます。
# 間違ったコピーの例
list_a = [1, 2, 3]
list_b = list_a # これは中身のコピーではない!
print(f"変更前: list_a = {list_a}, list_b = {list_b}")
# list_b を変更すると...
list_b.append(4)
# なんと list_a も変わってしまう!
print(f"変更後: list_a = {list_a}, list_b = {list_b}")
実行結果:
変更前: list_a = [1, 2, 3], list_b = [1, 2, 3]
変更後: list_a = [1, 2, 3, 4], list_b = [1, 2, 3, 4]
これを避けるには、copy() メソッドを使って、完全に独立した新しいリストを作成します。
# 正しいコピーの例
list_a = [1, 2, 3]
list_c = list_a.copy() # copy()メソッドを使う
print(f"変更前: list_a = {list_a}, list_c = {list_c}")
# list_c を変更しても...
list_c.append(4)
# list_a は影響を受けない!
print(f"変更後: list_a = {list_a}, list_c = {list_c}")
実行結果:
変更前: list_a = [1, 2, 3], list_c = [1, 2, 3]
変更後: list_a = [1, 2, 3], list_c = [1, 2, 3, 4]
5. まだある!便利なコレクションたち
Pythonにはリストと辞書の他にも便利なコレクションがあります。ここでは簡単に2つ紹介します。
タプル (Tuple)
タプルは、一言で言うと「変更できないリスト」です。作り方はリストの角括弧 [] を丸括弧 () に変えるだけ。一度作成したら、要素の追加や変更、削除ができません。そのため、プログラムの途中で変わってほしくない定数のようなデータを管理するのに適しています。
# RGBカラーコードをタプルで定義
color_red = (255, 0, 0)
print(f"赤色のRGB値: {color_red}")
# 最初の要素にアクセス
print(f"Rの値: {color_red[0]}")
# 変更しようとするとエラーになる
# color_red[0] = 200 # TypeError: 'tuple' object does not support item assignment
実行結果:
赤色のRGB値: (255, 0, 0)
Rの値: 255
セット (Set)
セットは「重複する値を持たない、順序のない」コレクションです。辞書と同じく波括弧 {} を使いますが、キーと値のペアではなく値だけを格納します。主な用途は、リストから重複する要素を削除したり、複数のリスト間で共通の要素や異なる要素を見つけたりすることです。
# 重複のあるリスト
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
print(f"元のリスト: {numbers}")
# セットに変換して重複を削除
unique_numbers = set(numbers)
print(f"重複を削除したセット: {unique_numbers}")
# セットからリストに戻す
unique_list = list(unique_numbers)
print(f"リストに戻したもの: {unique_list}")
実行結果:
元のリスト: [1, 2, 2, 3, 4, 4, 4, 5]
重複を削除したセット: {1, 2, 3, 4, 5}
リストに戻したもの: [1, 2, 3, 4, 5]
まとめ
今回は、Pythonのデータ構造の中心である「リスト」と「辞書」について、基本的な使い方からWeb制作での応用例までを解説しました。
- リスト
[]: 順番が大切なデータの集まりに。 - 辞書
{}: キーと値のペアで、意味のあるデータを管理するのに。 - 応用: これらを組み合わせることで、動的なWebコンテンツのデータ構造を簡単に作れる。
- 注意点: リストのコピーには
copy()メソッドを使う。
これらのコレクションを使いこなすことは、Pythonでのプログラミング効率を飛躍的に向上させます。特にWeb開発の世界では、データベースから取得したデータをリストや辞書として扱い、HTMLを生成する、という流れが基本です。ぜひ、この記事のコードを実際に手元で動かしてみて、「自分でデータを操る楽しさ」を実感してください!
次のステップへ:
データの扱いに慣れたら、次はファイルからデータを読み込んだり、処理結果をファイルに保存したりする方法を学びましょう。以下の記事で詳しく解説しています。
Pythonでファイルを読み書きする方法(入出力)