Pythonの辞書内包表記(Dictionary Comprehensions)は、辞書を簡潔かつ効率的に生成するための強力な機能です。
リスト内包表記と同様に、辞書内包表記を使用すると、ループや条件式を一行で記述して新しい辞書を作成することができます。
以下に、辞書内包表記の基本的な構文と使い方を詳しく解説します。
基本構文
辞書内包表記の基本構文は次のとおりです:
{キー: 値 for 変数 in イテラブル}
基本的な例
例:0から9までの数をキー、数の2乗を値とする辞書を作成する
squares = {x: x**2 for x in range(10)}
print(squares)
# 出力: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
条件付き辞書内包表記
辞書内包表記には、条件を追加することができます。
条件が満たされる場合にのみ、辞書にキーと値が追加されます。
構文
{キー: 値 for 変数 in イテラブル if 条件}
例:0から9までの数の中から偶数の2乗を値とする辞書を作成する
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)
# 出力: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
複数のイテラブルを使った辞書内包表記
辞書内包表記は、複数のイテラブルを使って辞書を生成することもできます。
例:2つのリストを使って辞書を作成する
keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = {k: v for k, v in zip(keys, values)}
print(my_dict)
# 出力: {'a': 1, 'b': 2, 'c': 3}
辞書のキーと値を反転させる
辞書内包表記を使用して、既存の辞書のキーと値を反転させることができます。
例
original_dict = {'a': 1, 'b': 2, 'c': 3}
inverted_dict = {v: k for k, v in original_dict.items()}
print(inverted_dict)
# 出力: {1: 'a', 2: 'b', 3: 'c'}
ネストされた辞書内包表記
辞書内包表記はネストして使用することもできます。
これは、複雑なデータ構造を生成する際に便利です。
例:2次元辞書を作成する
nested_dict = {i: {j: i * j for j in range(3)} for i in range(3)}
print(nested_dict)
# 出力: {0: {0: 0, 1: 0, 2: 0}, 1: {0: 0, 1: 1, 2: 2}, 2: {0: 0, 1: 2, 2: 4}}
辞書内包表記の利点
- 簡潔さ: 内包表記はコードを短くし、読みやすくすることができます。
- 効率性: 内包表記は通常、ループを使った辞書生成よりも高速です。
辞書内包表記の制限
- 複雑な処理: 内包表記は短くて簡潔な処理には適していますが、複雑な処理には適しません。可読性が低下するため、複雑な処理は通常のループや関数を使用する方が良いでしょう。
- 過度のネスト: 内包表記が過度にネストされると、読みやすさが大幅に低下します。適度に使用することが重要です。
まとめ
辞書内包表記は、簡潔で効率的に辞書を生成するための強力なツールです。
条件を追加したり、複数のイテラブルを使用したり、ネストした内包表記を使用することで、複雑な辞書の生成も容易に行うことができます。
ただし、内包表記が複雑になると可読性が低下するため、適度に使用することが重要です。
スポンサーリンク