Pythonデータ構造|辞書内包表記とzip関数の組み合わせで効率アップ【レッスン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を用いたアプリ開発

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-12 辞書のループ処理を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-14 集合の定義と基本操作を理解しよう

辞書内包表記とは?Pythonで簡潔に辞書を作る構文

この章では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の辞書操作がよりシンプルで効率的になります。

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

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

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

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

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

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

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

問題の詳細条件

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

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

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

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

【ヒント】難しいと感じる人だけ見よう

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

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

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

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

Q
ヒント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文字列を使って、商品名と価格を日本語で表示するコードを書いてください。
    """

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

問題の答え合わせと解説

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

一つの正解例

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

Q
正解コード
# 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つのリストから辞書を作成する方法を学びます。

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

Q
詳細解説

リストを作成

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

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-12 辞書のループ処理を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-14 集合の定義と基本操作を理解しよう

FAQ|Python辞書内包表記とzip関数

Q
Q1. zip()を使うメリットは?

複数のリストを一括で処理できるため、辞書の自動生成やペア化に非常に便利です。コードの可読性も向上します。

Q
Q2. 内包表記で条件付きの辞書を作成できますか?

はい、if文を組み込むことで、条件に合致した要素のみで辞書を生成できます。フィルタ処理に有効です。

Q
Q3. 辞書内包表記でキーが重複した場合は?

同じキーがあると、最後に出現した値が採用されます。データ重複がある場合は事前に確認が必要です。

質問用コンタクトフォーム

この記事はAIを用いて書いた記事です。

人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。

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

記事URLをコピーしました