Pythonの辞書内包表記(dict)の基本と使い方

  • 公開日:2018/11/08
  • 更新日:2018/11/12
  • 投稿者:n bit

Pythonでリスト内包表記と同じように辞書(dict)でも辞書内包表記を記述できます。辞書内包表記を使えばコードの記述が簡潔になり実行処理速度も上がります。今回はその辞書内包表記の基本と使い方についての解説です。

  • Python

この記事は約 分で読めます。(文字)

Pythonの辞書内包表記

内包表記はリスト以外にsetやdictでも利用することが可能です。今回は『辞書内包表記(dict)』について学習していきましょう。

基本的に辞書内包表記はリスト内包表記がlistからdictに置き換わったものと考えれば十分ですが、辞書にはkeyとvalueがありますので若干表記方法などに違いがあります。

『内包表記』の基本的な考え方についてはリスト内包表記と同じです。リスト内包表記ページで詳しく解説していますので、まだご覧になっていない方は先にそちらのページをご確認ください。

辞書内包表記の記述方法

では早速辞書内包表記の記述方法を確認していきましょう。辞書内包表記の基本的な記述方法は以下のようになります。

  • {新に格納する要素のkey:新に格納する要素のvalue for 配列内要素 in 配列}

最終的に辞書を生成しますので波カッコ『 { } 』で挟み、新に格納する要素の『key:value』を最初に記述し、その後は通常のfor文と同じです。リスト内包表記の時とはカッコの形状と『key:value』形式が変わります。

実際にコードを確認しましょう。下記のサンプルコードは辞書内包表記を使ってtupleから取得した値をkeyにして新しいdictを作成した事例です。

keys = ['a', 'b', 'c']

dicts = {key:'1' for key in keys}

print(dicts)

出力結果

{'b': '1', 'a': '1', 'c': '1'}

動きを理解しやすいようにまずはkeyのみを配列から渡し、valueに関しては全て'1'で設定しました。この表記方法であればリスト内包表記と大きく変わりませんので理解しやすいでしょう。

辞書内包表記で利用されるサンプルコード

辞書内包表記で利用される事例をサンプルコード付きで紹介しておきましょう。

辞書内包表記とzip関数を合わせて利用する場合のサンプルコード

辞書内包表記内でzip関数と合わせて利用する場合の事例です。

辞書の場合『key:value』形式で値をセットしていくため通常は2つの配列から取得することがほとんどです。そのため複数リストの値を同時に取得できるPythonの組み込み関数『zip関数』を利用して新しいdictを生成します。

zip関数の詳しい使い方は下記のページをご参照ください。

zip関数は第1引数に1つ目の配列オブジェクト、第2引数に2つ目の配列オブジェクトを指定すると両方の配列から同時に要素を取得します。

zip(配列オブジェクト1,  配列オブジェクト2)

まずは『zip関数』を利用した通常のfor文で2つの配列から辞書を生成する場合のコードです。

keys = ['a', 'b', 'c']

values = [1, 2, 3]
dicts = {}

for key, value in zip(keys, values):
dicts[key] = value

print(dicts)

出力結果

{'b': 2, 'a': 1, 'c': 3}

下記のサンプルコードは上記のコードを辞書内包表記を使って置き換えたものです。通常のコードから『key:value』形式の受け取りに変更した位で、for文自体は基本的に同じです。

keys = ['a', 'b', 'c']

values = [1, 2, 3]

dicts = {key:value for key, value in zip(keys, values)}

print(dicts)

出力結果

{'b': 2, 'a': 1, 'c': 3}
  • ※ 辞書はシーケンスオブジェクトではないため出力結果の要素順序は違う可能性があります。その点にご注意ください。

シーケンスオブジェクトについては下記のページで詳しく解説しています。

今日のdot

辞書内包表記は2配列から辞書を生成するような場合によく利用しますので覚えておくと良いでしょう。辞書内包表記で記述することでコードもスッキリとし可読性も上がります。

▲ ページの先頭へ戻る

このページの目次

目次