Pythonの辞書内包表記(dict)の基本と使い方
- 公開日:2018/11/08
- 更新日:2018/11/12
- 投稿者:n bit
Pythonでリスト内包表記と同じように辞書(dict)でも辞書内包表記を記述できます。辞書内包表記を使えばコードの記述が簡潔になり実行処理速度も上がります。今回はその辞書内包表記の基本と使い方についての解説です。
この記事は約 分で読めます。(文字)
Pythonの辞書内包表記
内包表記はリスト以外にsetやdictでも利用することが可能です。今回は『辞書内包表記(dict)』について学習していきましょう。
基本的に辞書内包表記はリスト内包表記がlistからdictに置き換わったものと考えれば十分ですが、辞書にはkeyとvalueがありますので若干表記方法などに違いがあります。
『内包表記』の基本的な考え方についてはリスト内包表記と同じです。リスト内包表記ページで詳しく解説していますので、まだご覧になっていない方は先にそちらのページをご確認ください。
Pythonのリスト内包表記の基本と使い方
Pythonでリストを生成するときに内包表記を利用するとコード内容によっては簡潔に記述することができ無駄な呼び出し処理も抑えられるので実行処理速度を上げることができます。今回はそのリスト内包表記の基本と使い方についての解説です。
辞書内包表記の記述方法
では早速辞書内包表記の記述方法を確認していきましょう。辞書内包表記の基本的な記述方法は以下のようになります。
- {新に格納する要素の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関数の詳しい使い方は下記のページをご参照ください。
Pythonで複数リストの値を同時に取得するzip関数
Pythonで複数のリストオブジェクトがあり、それぞれのデータを同時に取得して扱いたいときに便利な組み込み関数『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}
- ※ 辞書はシーケンスオブジェクトではないため出力結果の要素順序は違う可能性があります。その点にご注意ください。
シーケンスオブジェクトについては下記のページで詳しく解説しています。
Pythonのシーケンス(sequence)型とミュータブル・イミュータブル
Pythonのオブジェクトにはシーケンス(sequence)型やミュータブル・イミュータブルと言った機能別のカテゴリがあります。今回はシーケンス型の基本、演算、メソッド、組み込み関数とあわせてミュータブル・イミュータブルも解説します。
今日のdot
辞書内包表記は2配列から辞書を生成するような場合によく利用しますので覚えておくと良いでしょう。辞書内包表記で記述することでコードもスッキリとし可読性も上がります。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。