【Python】辞書(dict)をfor文で処理する方法

この記事では、辞書をfor文で処理する基本的な方法から、応用テクニックまでをわかりやすく解説します。

辞書のキーや値をループ処理する方法、ネストされた辞書の扱い方、辞書の内包表記、そして辞書の更新や削除をfor文で行う方法について学びましょう。

目次から探す

辞書をfor文で処理する方法

Pythonの辞書(dict)はキーと値のペアを持つデータ構造で、データの管理や操作に非常に便利です。

この記事では、辞書をfor文で処理する方法について詳しく解説します。

辞書のキーをループ処理する

辞書のキーをループ処理する方法は主に2つあります。

keys()メソッドを使用する方法と、直接キーをループ処理する方法です。

keys()メソッドの使用

keys()メソッドを使用すると、辞書のすべてのキーを取得できます。

以下はその例です。

# 辞書の定義
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
# keys()メソッドを使用してキーをループ処理
for key in my_dict.keys():
    print(key)

このコードを実行すると、以下のように出力されます。

apple
banana
cherry

直接キーをループ処理する方法

Pythonでは、辞書を直接ループ処理することもできます。

この場合、デフォルトでキーがループ処理されます。

# 辞書の定義
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
# 直接キーをループ処理
for key in my_dict:
    print(key)

このコードを実行しても、先ほどと同じ結果が得られます。

apple
banana
cherry

辞書の値をループ処理する

辞書の値をループ処理するには、values()メソッドを使用します。

values()メソッドの使用

values()メソッドを使用すると、辞書のすべての値を取得できます。

以下はその例です。

# 辞書の定義
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
# values()メソッドを使用して値をループ処理
for value in my_dict.values():
    print(value)

このコードを実行すると、以下のように出力されます。

1
2
3

辞書のキーと値を同時にループ処理する

辞書のキーと値を同時にループ処理するには、items()メソッドを使用します。

items()メソッドの使用

items()メソッドを使用すると、辞書のすべてのキーと値のペアを取得できます。

以下はその例です。

# 辞書の定義
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
# items()メソッドを使用してキーと値を同時にループ処理
for key, value in my_dict.items():
    print(f'キー: {key}, 値: {value}')

このコードを実行すると、以下のように出力されます。

キー: apple, 値: 1
キー: banana, 値: 2
キー: cherry, 値: 3

以上が、Pythonの辞書をfor文で処理する基本的な方法です。

これらの方法を使いこなすことで、辞書のデータを効率的に操作することができます。

応用テクニック

ネストされた辞書の処理

ネストされた辞書とは、辞書の中にさらに辞書が含まれている構造のことを指します。

ネストされた辞書を処理する際には、再帰的にループを回す方法が有効です。

以下に例を示します。

# ネストされた辞書の例
nested_dict = {
    'person1': {'name': 'Alice', 'age': 30},
    'person2': {'name': 'Bob', 'age': 25},
    'person3': {'name': 'Charlie', 'age': 35}
}
# 再帰的にネストされた辞書を処理する関数
def process_nested_dict(d, indent=0):
    for key, value in d.items():
        print(' ' * indent + str(key) + ':', end=' ')
        if isinstance(value, dict):
            print()
            process_nested_dict(value, indent + 2)
        else:
            print(value)
# 関数の呼び出し
process_nested_dict(nested_dict)

このコードを実行すると、以下のような出力が得られます。

person1:
  name: Alice
  age: 30
person2:
  name: Bob
  age: 25
person3:
  name: Charlie
  age: 35

このように、再帰的に関数を呼び出すことで、ネストされた辞書のすべてのキーと値を処理することができます。

辞書の内包表記を使った処理

辞書の内包表記を使うと、簡潔に辞書を生成したり、既存の辞書を変換したりすることができます。

以下にいくつかの例を示します。

辞書の生成

# 1から5までの数値をキーに、その2乗を値とする辞書を生成
squares = {x: x**2 for x in range(1, 6)}
print(squares)

このコードを実行すると、以下のような出力が得られます。

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

辞書の変換

# 既存の辞書の値を2倍にする
original_dict = {'a': 1, 'b': 2, 'c': 3}
doubled_dict = {k: v * 2 for k, v in original_dict.items()}
print(doubled_dict)

このコードを実行すると、以下のような出力が得られます。

{'a': 2, 'b': 4, 'c': 6}

辞書の更新と削除をfor文で行う

辞書の更新や削除をfor文で行う場合、辞書のサイズが変更されるため、注意が必要です。

以下に例を示します。

辞書の更新

# 既存の辞書の値を2倍にする
original_dict = {'a': 1, 'b': 2, 'c': 3}
for key in original_dict.keys():
    original_dict[key] *= 2
print(original_dict)

このコードを実行すると、以下のような出力が得られます。

{'a': 2, 'b': 4, 'c': 6}

辞書の削除

辞書の要素を削除する場合、リストにキーを一時的に保存してから削除する方法が安全です。

# 値が2以下の要素を削除する
original_dict = {'a': 1, 'b': 2, 'c': 3}
keys_to_delete = [key for key, value in original_dict.items() if value <= 2]
for key in keys_to_delete:
    del original_dict[key]
print(original_dict)

このコードを実行すると、以下のような出力が得られます。

{'c': 3}

このように、辞書の更新や削除をfor文で行う際には、辞書のサイズ変更に注意しながら処理を行うことが重要です。

目次から探す