「辞書(dict)に値をまとめて追加したいのに、for文を書くとどうしても行数が増えてしまう」「他の人のコードで {key: value for ...} のような書き方を見かけたけど、意味がよく分からない」——そんな経験はありませんか。
この書き方は「辞書内包表記(dict comprehension)」と呼ばれるPythonの機能です。慣れないうちは読みにくく感じるかもしれませんが、使いこなせるようになると、for文を何行も書いていた処理をたった1行で表現できるようになります。この記事では、辞書内包表記の基本的な書き方から、条件分岐を使った応用、実践的な活用例までを初心者向けに丁寧に解説します。
辞書内包表記とは?
辞書内包表記とは、for文とif文を1行にまとめて書くことで、新しい辞書(dict)を簡潔に作成できるPythonの構文です。リストを作る「リスト内包表記」の辞書版だとイメージすると分かりやすいでしょう。リスト内包表記について詳しく知りたい方は、以下の記事もあわせてご覧ください。
【Python】リスト内包表記の使い方を徹底解説!for文との違いや書き方を初心者向けに紹介!
辞書そのものの基本的な使い方に不安がある方は、先に以下の記事で作り方やループ処理をおさらいしておくとスムーズです。
【Python】辞書(dict)の使い方を初心者向けに徹底解説!作り方からループ処理まで完全網羅!
基本的な書き方
基本構文
辞書内包表記の基本構文は次のとおりです。
{key: value for 変数 in イテラブル}
実際に、数値のリストから「数値をキー、その2乗を値」とする辞書を作ってみましょう。
numbers = [1, 2, 3, 4, 5]
squares = {n: n ** 2 for n in numbers}
print(squares)
# 実行結果: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}for文で書いた場合との比較
同じ処理をfor文で書くと、次のようになります。
numbers = [1, 2, 3, 4, 5]
squares = {}
for n in numbers:
squares[n] = n ** 2
print(squares)
# 実行結果: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}4行かかっていた処理が、辞書内包表記を使うとたった1行にまとまります。for文の書き方に自信がない方は、以下の記事も参考にしてください。
Pythonのfor文・range関数を攻略!これを知れば基本的な処理ができる使い方9選!
条件分岐(if)を使う書き方
辞書内包表記では、末尾に if 条件を付け加えることで、特定の条件を満たす要素だけを辞書に含めることができます。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_squares = {n: n ** 2 for n in numbers if n % 2 == 0}
print(even_squares)
# 実行結果: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}「偶数だけを対象にしたい」といったフィルタリング処理も、条件式を1つ足すだけで実現できるのが辞書内包表記の便利なところです。
実践的な活用例
2つのリストを辞書にまとめる
名前のリストと点数のリストのように、対応関係にある2つのリストを1つの辞書にまとめたい場面はよくあります。そのようなときは zip() 関数と組み合わせると簡単です。
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
score_dict = {name: score for name, score in zip(names, scores)}
print(score_dict)
# 実行結果: {'Alice': 85, 'Bob': 92, 'Charlie': 78}このように、ちょっとしたデータ整形を自分の書いたコードでサクサクこなせるようになると、Python学習がぐっと楽しくなってきます。ただ、独学だとどうしても「この書き方で本当に合っているのか」「もっと効率よく学べる方法はないのか」と一人で悩んで伸び悩んでしまうことも少なくありません。そんなときは、プロに直接教えてもらえるプログラミングスクールを検討してみるのも一つの手です。以下の記事でスクールの選び方やおすすめをまとめていますので、独学に限界を感じたら参考にしてください。
【全スクール無料体験あり!】プログラミングを学びたい人におすすめのスクール5選!
既存の辞書の値を加工する
すでにある辞書の値だけを一括で加工したい場合は、.items() を使って辞書内包表記を組み立てます。たとえば、商品の価格一覧に消費税を加算するケースを見てみましょう。
prices = {"apple": 100, "banana": 150, "orange": 120}
tax_included = {item: int(price * 1.1) for item, price in prices.items()}
print(tax_included)
# 実行結果: {'apple': 110, 'banana': 165, 'orange': 132}このように、既存のデータを一括変換するようなケースでも辞書内包表記は非常に役立ちます。集計処理をよく行う方は、以下の記事で紹介している collections モジュールもあわせて活用すると、さらに効率的にデータを扱えるようになります。
【Python】collectionsモジュールの使い方を初心者向けに徹底解説!Counter・defaultdictで集計を簡単に
辞書内包表記を使うときの注意点
便利な辞書内包表記ですが、使う際にはいくつか注意しておきたいポイントがあります。
- 同じキーが複数回出てくる場合、後から処理された値で上書きされてしまう(キーの重複に注意)
- 条件分岐やネストが増えて1行が長くなりすぎると、かえって読みにくくなる
- 複雑な処理になりそうなときは、無理に1行にまとめず、通常のfor文に戻したほうが可読性が高くなる場合もある
「短く書けるかどうか」よりも「後で読んだときに分かりやすいかどうか」を基準に、辞書内包表記とfor文を使い分けていくとよいでしょう。
※本記事には広告(アフィリエイトリンク)を含みます。
もっと効率的にPythonを学びたい人へ
辞書内包表記のような「書き方のコツ」は、独学で書籍やネット記事だけを読んでいると、なかなか身につくまでに時間がかかるものです。もし「我流の書き方で本当に合っているのか不安」「効率よく実践的なコードの書き方を身につけたい」と感じているなら、マンツーマンで指導してもらえるスクールを利用するのも近道です。未経験からのPython習得や転職サポートも含めて、無料カウンセリングで相談できるサービスもあります。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
今回は、Pythonの辞書内包表記について解説しました。最後に要点を振り返っておきましょう。
- 辞書内包表記は
{key: value for 変数 in イテラブル}の形で、for文を使わずに1行で辞書を作成できる構文 - 末尾に
if条件を加えることで、特定の条件を満たす要素だけを抽出できる zip()と組み合わせれば2つのリストを1つの辞書にまとめられる.items()を使えば既存の辞書の値だけを一括で加工できる- 読みにくくなるほど複雑な場合は、無理に1行にまとめずfor文に戻すのも選択肢
辞書内包表記を使いこなせるようになると、データの整形や集計処理をぐっとスマートに書けるようになります。ぜひ日々のコーディングで積極的に使ってみてください。
ナノトイラボ 