【Python】レッスン4-13:辞書の内包表記を理解しよう

一つ前のLessonでは辞書のループ処理について学習しました。
今回は辞書の内包表記について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
Lesson4:データ構造編
・Lesson4-1:リストの定義と要素の追加を理解しよう
・Lesson4-2:リストの要素を削除しよう
・Lesson4-3:リストの情報を調べよう
・Lesson4-4:リストの集計・並べ替えを理解しよう
・Lesson4-5:リストのスライスを理解しよう
・Lesson4-6:リストのループ処理を理解しよう
・Lesson4-7:リストの内包表記を理解しよう
・Lesson4-8:リスト・タプル・辞書・集合の概要と違いを理解しよう
・Lesson4-9:タプルの基本を理解しよう
・Lesson4-10:タプルのアンパックを理解しよう
・Lesson4-11:辞書の基本を理解しよう
・Lesson4-12:辞書のループ処理を理解しよう
・Lesson4-13:辞書の内包表記を使ってリストから辞書を作ろう ◁今回はココ
・Lesson4-13:集合(セット)の基本を理解しよう
・練習問題4-1:宝探しゲームを作ろう
・練習問題4-2:ナインゲームを作ろう
・練習問題4-3:マルバツゲームを作ろう
Lesson5:オブジェクト指向編
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)
辞書を一行で作る|内包表記の基本と使いどころ
辞書の内包表記は、{キー式: 値式 for 変数 in 反復 if 条件}
の形で辞書を一行で生成できる記法です。
本記事では、基本の書き方と読み方、if
による条件付き生成、items()
を使った既存辞書からの変換、zip()
と組み合わせた2つのリストからの辞書作成などを初心者向けに整理します。
この記法を身につけると、キーや値の変換(例:小文字化・単価×数量で金額計算)、フィルタリング(しきい値で間引き)、辞書の反転(値→キー
)といった日常の処理を、短く意図が伝わるコードで書けるようになります。
既存のfor
+代入よりもミスが減り、処理の意図が一目で伝わります。
読み終える頃には、「いつ内包表記を選ぶか」を判断しながら安全に使い分けられるはずです。さっそく基本構文から、実用パターンへ進んでいきましょう。
辞書の内包表記の概要と基本構文
辞書の内包表記は リスト内包表記 と同様に、辞書を短いコードで作成・変換するための構文です。
辞書のキーや値に対して処理を行い、結果を新しい辞書として返す際に使用されます。この文法を活用することで、繰り返し処理をシンプルに書くことが可能です。
構文の基本形は次の通りです:
new_dictionary = {new_key: new_value for key, value in dictionary.items()} 新しい辞書 = {新しいキー: 新しい値 for 元のキー, 元の値 in 元の辞書.items()}
このように元の辞書から新しい辞書を作成できます。
for
の後に続く部分がループ処理にあたる部分で、元の辞書のキーと値に対して何らかの操作を行い、新しい辞書を生成します。
辞書の内包表記の使用例
次に、実際の使用例をいくつか紹介します。
# 例1: 辞書の値の数値を2倍にして新しい辞書を作成 original_dict = {'a': 1, 'b': 2, 'c': 3} # 辞書の定義 new_dict = {key: value * 2 for key, value in original_dict.items()} # 内包表記で新しい辞書を作成 # 変数 = {キー: 値 for キー, 値 in 辞書} print(new_dict) # {'a': 2, 'b': 4, 'c': 6}
このコードではoriginal_dict
という辞書の各値に対して2倍の処理を行い、新しい辞書 new_dict
を生成しています。
要素の取得には items()メソッド を使用しています。
また、元の辞書からデータを取得する際、条件を付けることもできます。
新しい辞書 = {新しいキー: 新しい値 for 元のキー, 元の値 in 元の辞書.items() if 条件}
次の例を見てみましょう。
# 例2: 条件付きで値をフィルタリング original_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4} # 辞書の定義 filtered_dict = {key: value for key, value in original_dict.items() if value > 2} # 変数 = {キー: 値 for キー, 値 in 辞書 条件} print(filtered_dict) # {'c': 3, 'd': 4}
この例ではif
文を使用して値が2より大きいものだけを新しい辞書に含めています。
条件を加えることで、特定の要素だけを操作することができます。
zip()
関数の使い方|リストから辞書を作成する方法
辞書の内包表記を使う際に zip()
関数 を組み合わせることがあります。
zip()
関数は2つ以上のリストを同時にループ処理する際に便利な関数で、それぞれのリストの要素をペアにしてタプルを生成します。
これにより、複数のリストを簡単に組み合わせて辞書を作成することが可能です。
例えば、以下のように zip()
を使用します:
names = ["山田", "佐藤", "鈴木"] # リストの定義 scores = [85, 92, 78] # リストの定義 # zip() を使って、名前とスコアをペアにし、辞書の内包表記で辞書を作成 student_scores = {name: score for name, score in zip(names, scores)} print(student_scores) # {'山田': 85, '佐藤': 92, '鈴木': 78}
このコードではzip()
関数を使って names
と scores
の要素をペアにし、辞書の内包表記でキーと値をそれぞれのペアから取り出して新しい辞書 student_scores
を作成しています。
まとめ|一行で“作る・変換する・絞り込む”辞書
辞書の内包表記を使うことでPythonの辞書操作がよりシンプルで効率的になります。
この文法を使いこなせば、辞書のキーや値に対する繰り返し処理やフィルタリングを、短く読みやすいコードで書けるようになります。
実際に手を動かして、さまざまなパターンで試してみてください!
- サイト改善アンケート|ご意見をお聞かせください(1分で終わります)
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。1分だけ、ご協力いただけますと幸いです。
【Python】サイト改善アンケート
練習問題:辞書の内包表記を使ってみよう
この記事で学習した「辞書の内包表記」を復習する練習問題に挑戦しましょう。
問題|リストから辞書を作ろう
zip()関数を使って2つのリストを結合し、辞書を作成するプログラムを作りましょう。
商品名のリストと価格のリストがあり、それぞれを辞書に変換して、商品の価格を管理できるようにします。
作成した辞書を使って、各商品の名前と価格を日本語で表示してください。
以下の要件に従ってコードを完成させてください。
- products というリストに「りんご」「バナナ」「みかん」「ぶどう」という商品名を格納すること。
- prices というリストにそれぞれの商品の価格「150」「100」「80」「200」を格納すること。
- zip()関数を使って、商品名と価格を組み合わせ、辞書 product_prices を作成すること。
- 辞書 product_prices を使い、各商品の価格を日本語で表示すること。
ただし、以下のような実行結果となるコードを書くこと。
商品の価格一覧: りんごの価格は 150 円です。 バナナの価格は 100 円です。 みかんの価格は 80 円です。 ぶどうの価格は 200 円です。
ヒント|難しいと感じる人だけ見よう
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
products = ['りんご', 'バナナ', 'みかん', 'ぶどう'] # 商品名のリスト prices = [150, 100, 80, 200] # 価格のリスト # zip()を使って商品名と価格を組み合わせ、それを辞書に変換 product_prices = {product: '''(穴埋め)''' for product, price in '''(穴埋め)'''(products, prices)} # 結果を日本語で表示 print("商品の価格一覧:") for product, price in product_prices.'''(穴埋め)'''(): print(f"{product}の価格は {price} 円です。")
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例|zipで作る商品価格辞書プログラム
例えば以下のようなプログラムが考えられます。
- 正解コード
-
products = ['りんご', 'バナナ', 'みかん', 'ぶどう'] # 商品名のリスト prices = [150, 100, 80, 200] # 価格のリスト # zip()を使って商品名と価格を組み合わせ、それを辞書に変換 product_prices = {product: price for product, price in zip(products, prices)} # 結果を日本語で表示 print("商品の価格一覧:") for product, price in product_prices.items(): print(f"{product}の価格は {price} 円です。")
辞書の内包表記の疑問解消|FAQと用語のまとめ
初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。
理解を深めたいときや、ふと疑問に感じたときに役立ててください。
FAQ|辞書の内包表記に関するよくある質問
- Q1. zip()を使うメリットは?
-
複数のリストを一括で処理できるため、辞書の自動生成やペア化に非常に便利です。コードの可読性も向上します。
- Q2. 内包表記で条件付きの辞書を作成できますか?
-
はい、if文を組み込むことで、条件に合致した要素のみで辞書を生成できます。フィルタ処理に有効です。
- Q3. 辞書内包表記でキーが重複した場合は?
-
同じキーがあると、最後に出現した値が採用されます。データ重複がある場合は事前に確認が必要です。
Python用語集|辞書の内包表記に関する用語一覧
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。
Python用語 | 定義・使い方の概要 | 解説記事へのリンク |
---|---|---|
辞書 | 複数のキーと値のペアを保持するデータ構造で、キーを使って値に高速アクセスできる | Lesson4-11 |
辞書の内包表記 | 一行の構文で辞書を生成する方法。{キー: 値 for 要素 in イテラブル} の形式で記述される | 本記事 |
zip() 関数 | 複数のイテラブルを対応する要素ごとに組み合わせてタプルのリストを生成する関数 | 本記事 |