辞書の繰り返し:キーと値を取り出す#

はじめに#

前回までに、Pythonの辞書の基本概念、作成方法、そして要素の追加・更新・削除方法について学びました。今回は、辞書の全要素に対して処理を行うための「繰り返し処理」について学びます。辞書からキーや値を取り出して、データを効率的に処理する方法を見ていきましょう。

辞書のキーを取得する:keys() メソッド#

辞書のすべてのキーを取得するには、keys() メソッドを使います。

>
# 学生の成績を表す辞書
scores = {"数学": 85, "英語": 72, "国語": 90, "理科": 78, "社会": 81}

# すべてのキー(科目名)を取得
subjects = scores.keys()
print("すべての科目:", subjects)
print(type(subjects))  # キーのデータ型を確認

# リストに変換することもできます
subjects_list = list(subjects)
print("リストに変換した科目:", subjects_list)
print(type(subjects_list))
すべての科目: dict_keys(['数学', '英語', '国語', '理科', '社会'])
<class 'dict_keys'>
リストに変換した科目: ['数学', '英語', '国語', '理科', '社会']
<class 'list'>

keys() メソッドは、dict_keys という特殊なオブジェクトを返します。これは繰り返し処理(for文など)で使えますが、必要に応じて list() 関数でリストに変換することもできます。

辞書の値を取得する:values() メソッド#

辞書のすべての値を取得するには、values() メソッドを使います。

>
# 学生の成績を表す辞書
scores = {"数学": 85, "英語": 72, "国語": 90, "理科": 78, "社会": 81}

# すべての値(点数)を取得
points = scores.values()
print("すべての点数:", points)

# 値をリストに変換
points_list = list(points)
print("リストに変換した点数:", points_list)

# 値の合計と平均を計算
total = sum(points)
average = total / len(scores)
print(f"合計点: {total}, 平均点: {average:.1f}")
すべての点数: dict_values([85, 72, 90, 78, 81])
リストに変換した点数: [85, 72, 90, 78, 81]
合計点: 406, 平均点: 81.2

values() メソッドは、dict_values という特殊なオブジェクトを返します。これも繰り返し処理で使えますし、リストに変換することもできます。上の例では、sum() 関数で点数の合計を求め、len() 関数で科目数を取得して、平均点を計算しています。

キーと値のペアを取得する:items() メソッド#

辞書からキーと値のペアを同時に取得するには、items() メソッドを使います。

>
# 商品の在庫を表す辞書
inventory = {"りんご": 25, "バナナ": 15, "オレンジ": 10, "ぶどう": 8}

# すべてのキーと値のペアを取得
items = inventory.items()
print("すべてのアイテム:", items)

# リストに変換
items_list = list(items)
print("リストに変換したアイテム:", items_list)
print("最初のアイテム:", items_list[0])  # タプルとして取得できる
すべてのアイテム: dict_items([('りんご', 25), ('バナナ', 15), ('オレンジ', 10), ('ぶどう', 8)])
リストに変換したアイテム: [('りんご', 25), ('バナナ', 15), ('オレンジ', 10), ('ぶどう', 8)]
最初のアイテム: ('りんご', 25)

items() メソッドは、dict_items という特殊なオブジェクトを返し、これをリストに変換すると、各要素は (キー, 値) の形式のタプルになります。

for文で辞書を繰り返し処理する#

辞書の要素を処理するために、for文と組み合わせて使うことができます。

キーだけを繰り返し処理#

>
# 商品の価格を表す辞書
prices = {"コーヒー": 380, "紅茶": 320, "ジュース": 280, "水": 120}

# キーだけを繰り返し処理
print("商品一覧:")
for item in prices:  # デフォルトではキーが取得される
    print(f"- {item}")

# 明示的にキーを繰り返し処理(上と同じ結果)
print("\n商品一覧(明示的にkeys()を使用):")
for item in prices.keys():
    print(f"- {item}")
商品一覧:
- コーヒー
- 紅茶
- ジュース
- 水

商品一覧(明示的にkeys()を使用):
- コーヒー
- 紅茶
- ジュース
- 水

辞書を直接for文で繰り返し処理すると、デフォルトではキーが取得されます。必要に応じて、明示的に keys() メソッドを使うこともできます。

値だけを繰り返し処理#

>
# 商品の価格を表す辞書
prices = {"コーヒー": 380, "紅茶": 320, "ジュース": 280, "水": 120}

# 値だけを繰り返し処理
print("価格一覧(税込):")
for price in prices.values():
    tax_included = int(price * 1.1)  # 10%の消費税を追加
    print(f"- {tax_included}円")
価格一覧(税込):
- 418円
- 352円
- 308円
- 132円

values() メソッドを使うと、値だけを繰り返し処理できます。

キーと値のペアを同時に繰り返し処理#

最も便利なのは、items() メソッドを使ってキーと値のペアを同時に処理する方法です。

>
# 商品の価格を表す辞書
prices = {"コーヒー": 380, "紅茶": 320, "ジュース": 280, "水": 120}

# キーと値のペアを繰り返し処理
print("商品の価格一覧(税込):")
for item, price in prices.items():
    tax_included = int(price * 1.1)  # 10%の消費税を追加
    print(f"- {item}: {price}円(税込: {tax_included}円)")
商品の価格一覧(税込):
- コーヒー: 380円(税込: 418円)
- 紅茶: 320円(税込: 352円)
- ジュース: 280円(税込: 308円)
- 水: 120円(税込: 132円)

items() メソッドを使うと、繰り返しの各ステップで、キー(商品名)と値(価格)の両方を同時に取得できます。これにより、簡潔で読みやすいコードが書けます。

辞書を使った実用例:データの集計と分析#

辞書は複雑なデータを集計・分析するのに便利です。以下の例では、果物の販売データを集計する方法を見てみましょう。

>
# ある日の果物の販売記録(果物名, 個数)
sales_records = [
    ("りんご", 5),
    ("バナナ", 3),
    ("オレンジ", 2),
    ("りんご", 2),
    ("バナナ", 4),
    ("りんご", 3),
    ("オレンジ", 1),
    ("ぶどう", 5),
    ("りんご", 1)
]

# 各果物の販売合計を集計する
sales_summary = {}

# 記録を順に処理
for fruit, count in sales_records:
    if fruit in sales_summary:  # すでにキーが存在する場合
        sales_summary[fruit] += count  # 販売数を加算
    else:  # キーがまだ存在しない場合
        sales_summary[fruit] = count  # 新しいキーと値を追加

# 集計結果を表示
print("果物別販売数:")
for fruit, total in sales_summary.items():
    print(f"{fruit}: {total}個")

# もっとも売れた果物を見つける
most_sold_fruit = None
max_count = 0

for fruit, count in sales_summary.items():
    if count > max_count:
        most_sold_fruit = fruit
        max_count = count

print(f"\n最も売れた果物: {most_sold_fruit} ({max_count}個)")
果物別販売数:
りんご: 11個
バナナ: 7個
オレンジ: 3個
ぶどう: 5個

最も売れた果物: りんご (11個)

この例では、販売記録をリストとして持っています。各記録は、果物名と販売個数のタプルです。これらの記録を辞書に集計して、果物ごとの合計販売数を計算しています。

辞書内包表記#

リスト内包表記と同様に、辞書も内包表記を使って簡潔に作成できます。

>
# 1から5までの数値を2乗した値を持つ辞書
squared = {x: x ** 2 for x in range(1, 6)}
print("数値の2乗:", squared)

# 文字列の長さをキーにした辞書
words = ["apple", "banana", "cherry", "date", "elderberry"]
word_lengths = {word: len(word) for word in words}
print("単語の長さ:", word_lengths)

# 条件付き辞書内包表記
long_words = {word: len(word) for word in words if len(word) > 5}
print("長い単語の長さ:", long_words)
数値の2乗: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
単語の長さ: {'apple': 5, 'banana': 6, 'cherry': 6, 'date': 4, 'elderberry': 10}
長い単語の長さ: {'banana': 6, 'cherry': 6, 'elderberry': 10}

辞書内包表記は {キー: 値 for 要素 in イテラブル} の形式で書きます。条件を追加する場合は、{キー: 値 for 要素 in イテラブル if 条件} のように書きます。

まとめ#

今回は、Pythonの辞書を効率的に処理するための繰り返し方法について学びました。

  • keys() メソッド:辞書のすべてのキーを取得
  • values() メソッド:辞書のすべての値を取得
  • items() メソッド:辞書のすべてのキーと値のペアを取得
  • for文による辞書の繰り返し処理
  • 辞書内包表記による簡潔な辞書の作成

辞書の繰り返し処理をマスターすることで、データの分析やレポート生成など、より複雑なタスクも効率的に行えるようになります。