3-1

辞書 (dictionary)

辞書とは

辞書(dictionary)は、キー(key)値(value) のペアを格納するデータ構造です。波括弧 {} で作ります。

python
# 辞書の作成person = {    "name": "太郎",    "age": 25,    "city": "東京"}# 値へのアクセスperson["name"]   # "太郎"person["age"]    # 25
辞書:キーから値へのマッピング"name""太郎""age"25キー(key)値(value)アクセス方法person["name"]→ "太郎"

辞書の基本操作

python
person = {"name": "太郎", "age": 25}# 値の追加・更新person["email"] = "taro@example.com"   # 新しいキーを追加person["age"] = 26                      # 既存のキーを更新# 値の削除del person["email"]# キーの存在確認"name" in person    # True"email" in person   # False# 辞書の長さlen(person)   # 2

注意: 存在しないキーにアクセスすると KeyError が発生します。

python
person["phone"]   # KeyError: 'phone'# 安全なアクセスには get() を使うperson.get("phone")          # None(エラーにならない)person.get("phone", "N/A")   # "N/A"(デフォルト値を指定)

辞書のメソッド

keys(), values(), items()

python
person = {"name": "太郎", "age": 25, "city": "東京"}person.keys()    # dict_keys(["name", "age", "city"])person.values()  # dict_values(["太郎", 25, "東京"])person.items()   # dict_items([("name", "太郎"), ("age", 25), ...])

辞書のループ

python
person = {"name": "太郎", "age": 25}# キーのループfor key in person:    print(key)   # name, age# キーと値のループfor key, value in person.items():    print(f"{key}: {value}")# name: 太郎# age: 25

その他のメソッド

python
d = {"a": 1, "b": 2}# コピーd2 = d.copy()# 別の辞書をマージd.update({"c": 3, "b": 20})   # d = {"a": 1, "b": 20, "c": 3}# ポップ(取り出して削除)d.pop("a")     # 1("a"の値を返して削除)d.pop("z", 0)  # 0(キーがない場合はデフォルト値)# 全削除d.clear()

辞書とリスト

辞書とリストは組み合わせて使うことが多いです。

リストの辞書(データベース的な使い方)

python
students = [    {"name": "田中", "score": 85, "grade": "B"},    {"name": "鈴木", "score": 92, "grade": "A"},    {"name": "佐藤", "score": 78, "grade": "C"},]# 特定の学生の点数を取得for student in students:    print(f"{student['name']}: {student['score']}点")

辞書でのカウント

python
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]count = {}for word in words:    if word in count:        count[word] += 1    else:        count[word] = 1count   # {"apple": 3, "banana": 2, "cherry": 1}

get() を使った簡潔なカウント

python
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]count = {}for word in words:    count[word] = count.get(word, 0) + 1count   # {"apple": 3, "banana": 2, "cherry": 1}

練習: 文字の頻度集計

基礎

文字列を受け取り、各文字の出現回数を辞書で返す関数 char_count(s) を定義してください。

練習: 辞書の反転

標準

辞書のキーと値を入れ替えた新しい辞書を返す関数 invert_dict(d) を定義してください。