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

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:辞書の内包表記

この記事の練習問題で使用する知識:
レッスン1~3の知識リストの定義と要素追加リストの要素削除リストの情報出力リストの集計・並べ替えリストのスライスリストのループ処理リストの内包表記タプルの定義と基本操作タプルのアンパックとネスト辞書の定義と基本操作辞書のループ処理辞書の内包表記集合の定義と基本操作

<<前の問題 問題集Top 次の問題>>

Pythonの「辞書の内包表記」とは

この章ではPythonにおける「辞書の内包表記」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Pythonでは辞書を効率的に操作するための方法として「辞書の内包表記」を使うことができます。

この文法を使うことで、辞書のキーや値を簡潔な記述で操作・生成することができます。

辞書の内包表記とは?

辞書の内包表記はリスト内包表記と同様に、辞書を短いコードで作成・変換するための構文です。

一般的には辞書のキーや値に対して処理を行い、結果を新しい辞書として返す際に使用されます。この文法を活用することで、繰り返し処理をシンプルに書くことが可能です。

構文の基本形は次の通りです:

{キー: 値 for キー, 値 in 辞書}

このように元の辞書から新しい辞書を作成できます。

for の後に続く部分がループ処理にあたる部分で、元の辞書のキーと値に対して何らかの操作を行い、新しい辞書を生成します。

辞書の内包表記の使用例

次に、実際の使用例をいくつか紹介します。

# 例1: 辞書の値を2倍にして新しい辞書を作成
original_dict = {'a': 1, 'b': 2, 'c': 3}
new_dict = {key: value * 2 for key, value in original_dict.items()}
print(new_dict)  # {'a': 2, 'b': 4, 'c': 6}

このコードではoriginal_dict という辞書の各値に対して2倍の処理を行い、新しい辞書 new_dict を生成しています。

# 例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}
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() 関数を使って namesscores の要素をペアにし、辞書の内包表記でキーと値をそれぞれのペアから取り出して新しい辞書 student_scores を作成しています。

辞書の内包表記の利点

辞書の内包表記には次のような利点があります。

  • コードの簡潔さ: 繰り返し処理を1行で記述できるため、コードが短くなり、可読性が向上します。
  • パフォーマンスの向上: 通常のループ処理よりも高速に処理されることが多いため、大量のデータを扱う際にも効果的です。
  • 条件付き処理が簡単: 内包表記内に条件を組み込むことで、フィルタリングや特定の条件に基づいた変換が容易になります。

まとめ

辞書の内包表記を使うことでPythonの辞書操作がよりシンプルで効率的になります。

この文法を使いこなせば、辞書のキーや値に対する繰り返し処理やフィルタリングを、短く読みやすいコードで書けるようになります。

実際に手を動かして、さまざまなパターンで試してみてください!

練習問題4-13:辞書の内包表記を使ってリストから辞書を作ろう

zip()関数を使って2つのリストを結合し、辞書を作成するプログラムを作りましょう。

商品名のリストと価格のリストがあり、それぞれを辞書に変換して、商品の価格を管理できるようにします。

作成した辞書を使って、各商品の名前と価格を日本語で表示してください。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • products というリストに「りんご」「バナナ」「みかん」「ぶどう」という商品名を格納すること。
  • prices というリストにそれぞれの商品の価格「150」「100」「80」「200」を格納すること。
  • zip()関数を使って、商品名と価格を組み合わせ、辞書 product_prices を作成すること。
  • 辞書 product_prices を使い、各商品の価格を日本語で表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

商品の価格一覧:
りんごの価格は 150 円です。
バナナの価格は 100 円です。
みかんの価格は 80 円です。
ぶどうの価格は 200 円です。

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:変数productsに「りんご」「バナナ」「みかん」「ぶどう」という商品名のリストを代入
2:変数pricesに「150」「100」「80」「200」という価格のリストを代入
3:zip()関数と内包表記を使って、productsとpricesを組み合わせて辞書product_pricesを作成
4:「商品の価格一覧:」と出力
5:for文を使い、辞書product_pricesの各項目をループ処理
  □ f文字列を使って「商品名の価格」を表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# zip()関数を使って2つのリストを結合し、辞書を作成するプログラム

# 商品名のリスト
"""
【穴埋め問題1】
ここに商品名(りんご、バナナ、みかん、ぶどう)を格納したリストproductsを作成してください。
"""

# 価格のリスト
"""
【穴埋め問題2】
ここに商品の価格(150、100、80、200)を格納したリストpricesを作成してください。
"""

# zip()を使って商品名と価格を組み合わせ、それを辞書に変換
"""
【穴埋め問題3】
ここにzip()を使ってproductsとpricesを組み合わせ、辞書product_pricesを作成してください。
"""

# 結果を日本語で表示
print("商品の価格一覧:")
for product, price in product_prices.items():
    """
    【穴埋め問題4】
    ここにf文字列を使って、商品名と価格を日本語で表示するコードを書いてください。
    """

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

# zip()関数を使って2つのリストを結合し、辞書を作成するプログラム

# 商品名のリスト
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} 円です。")

正解コードの解説

このコードではPythonの 辞書の内包表記 を使って、2つのリストから辞書を作成する方法を学びます。

以下、コードの各部分について順番に説明します。

リストを作成

products = ['りんご', 'バナナ', 'みかん', 'ぶどう']
prices = [150, 100, 80, 200]

まずは商品名を格納したリスト products を作成し、次に商品の価格を格納したリスト prices を作成しています。

pricesの各要素はそれぞれの商品の価格を表しますので、リストの順番は商品名と一致するように並んでいます。

zip() と辞書の内包表記を使用して辞書を作成

product_prices = {product: price for product, price in zip(products, prices)}

ここが最も重要な部分です。 zip() 関数は、複数のリストを同時に扱うために使用します。

productsprices のリストを結びつけて、ペアを作成しています。

  • zip() 関数は、productsprices の同じ位置にある要素をペアにします。
  • 辞書の内包表記 では、このペアを使って、商品名をキー、価格を値とする辞書を作成します。

具体的には{product: price} という形式で、商品名と価格のペアを辞書に追加しています。

これにより、product_prices という辞書が完成します。

辞書の内容を表示

print("商品の価格一覧:")
for product, price in product_prices.items():
    print(f"{product}の価格は {price} 円です。")

最後に辞書 product_prices の内容を表示します。

for文 を使って辞書のキー(商品名)と値(価格)を順番に取り出し、f 文字列を使って日本語で結果を表示しています。

  • for product, price in product_prices.items() は、辞書のすべてのキーと値を取得してループ処理を行います。
  • f”{product}の価格は {price} 円です。” は、f 文字列を使って、商品名と価格を表示します。f 文字列は変数を簡単に文字列に埋め込むことができる便利な方法です。

まとめ

このコードを通じて zip() 関数と 辞書の内包表記 を使ってリストから辞書を作成する方法と、for文 を使って辞書の内容を取り出して表示する方法を学習できました。

Pythonの辞書はキーと値のペアでデータを管理する便利なデータ構造です。練習を重ねて、効率的なデータ処理ができるようになりましょう!

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Python記事トップへ戻る
    トップページへ戻る