【Python】辞書内包表記(dict comprehension)の使い方を初心者向けに徹底解説!for文との違いから実践例まで

for文との違いから実践例まで解説

※このサイトの記事内では広告を掲載している場合があります。

「辞書(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文に戻すのも選択肢

辞書内包表記を使いこなせるようになると、データの整形や集計処理をぐっとスマートに書けるようになります。ぜひ日々のコーディングで積極的に使ってみてください。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA