2020.06.21重要度:★★★★★シリーズ「Pythonプログラミングの始め方」ではPythonの基礎文法を図を用いて分かりやすく解説していきます。今回は、この「辞書(Dictionary)」について「データ構造の基本」から「作り方(定義方法)」「要素へのアクセス(参照・取得・更新)」「辞書型の関数」について基礎から丁寧に図解で解説をします。この記事を読むことで次のことが「できる・わかる」ようになりますので最後までお付き合い下さい。この記事でわかること「辞書(dictionary)」データ構造の基本と作り方(定義の仕方)辞書の各要素へのアクセス方法(参照・取得・更新)について辞書型が提供する標準関数やメソッドについて本サイトでの紹介内容例は一例です。関数などの省略可能なオプション引数などについては割愛していますので、詳細や不明点などは必要に応じて公式サイトなどを参照してください。辞書型(Dictionary)とはPythonのデータ型である「辞書型」(dictionary)は「リスト」や「タプル」と同じように複数の値を要素として管理するデータ構造の一つです。「リスト」や「タプル」は、個々の要素を並び順(インデックス)で管理していますが、辞書の場合は「キー(Key)」と呼ばれる識別子(ラベル)が割り振られ、個々の要素を管理します。辞書の書式は、以下のように{}の中に「キー(Key):値(Value)」を組合せた要素をもつ構造をとります。要素(値)へのアクセスは、キーを使って参照するので一つの辞書の中に同じキーを重複して持たせることはできません。よって、リストやタプルのように要素の位置を意識することはありません。辞書オブジェクトのキーと値の関係また「キー(Key)」は後から変更できない性質上、イミュータブルな型をもつデータを採ります。「文字列」や「数値」「タプル」などのデータがキーになり得ます。値については、イミュータブルなデータ型の他、リストや辞書といったミュータブルなデータ型を採ることができます。辞書の基本操作について辞書型のデータ構造を実際にコードで確認してみましょう。次の<List1>は基本的な辞書の作成例として、「キー」にイミュータブルなオブジェクトである「文字列(➀)」「数値(➁)」「タプル(➂)」を指定しています。問題なく辞書が作成できています。タプル今度は「キー」にミュータブルなオブジェクトである「リスト」を指定した場合の例を示します。(➃)<List2>「キー」はイミュータブルなオブジェクトしか指定できませんので次のように「TypeError」が発生して辞書を作成することはできません。‘list’「キー」の値が重複することは許することは許されません。次のように同じ「キー」をもつ辞書を定義しようとするとエラーになることはありませんが、最後に指定した「キー」の値が最終的にその辞書の要素となります。4}また、辞書の要素にアクセスする(値を取得する)には、“[キー]”のようにキーをインデックスにして対となる値にアクセスします。存在しないキーに対してアクセスを試みた場合は、「KeyError」が発生します。辞書の要素の更新と追加について辞書は、ミュータブルなオブジェクトですので、後から要素を「更新」したり「追加」することができます。書式は次のように「辞書オブジェクト」に”キー(key)”をインデックス指定して、”新しい値(value)”を設定することで対応します。指定した“キー”が既に存在していれば、“新しい値”で書き換えられます。(更新)存在していなければ、新しい要素として「“キー”:“新しい値”」が追加されることになります。辞書の要素を更新・追加する辞書の「更新」「追加」について具体例で確認します。例1.既存の辞書オブジェクトに対して要素を更新します。<List5>更新したい「キー」をインデックス指定して、新たな値で書き換えます。➂’key3’を3→30へ更新しています。既存の辞書オブジェクトに対して要素を追加します。<List6>追加したい、新規「キー」をインデックスに指定して、新たな値とともに新要素として追加します。辞書の追加・更新に関するメソッド追加と更新に関して、辞書オブジェクトには2つの関数が用意されています。辞書オブジェクトに「キー」で指定した要素が存在しなければその要素を追加しますが、すでに存在した場合は置き換えません。値の上書きを防ぐことができます。2つの辞書をマージし、既存の要素を更新します。書式は次のとおりです。(上書きしない)(➀)が、辞書に存在しないキー(‘key4’)の場合は、新規要素が追加されます。(➁)また、setdefault()メソッドの第2引数を省略した場合は、値が’None’として要素が追加されます。<List8>次の例では、辞書(dict1(➃))を辞書(dict2(➄))でアップデート(更新)します。既存のキーの値を更新し、キーが存在しない場合は要素ごと追加します。結果は、’key1’の要素が1→10へ更新され、’key4’の要素が追加されました。戻り値を返さず、元の辞書そのものを更新します。よって、➇のように変数resultは‘None’となります。辞書の要素を削除する辞書は不要になった要素を削除することができます。要素を指定して削除する「delステートメント」と一度にすべての要素を削除できる「clear()メソッド」があります。書式は以下の通りです。なし辞書の要素を削除する具体例を紹介します。delステートメントで特定の要素を削除する。該当する要素を削除しています。3}また、存在しない「キー」に対して削除を行おうとするとエラーが発生します。次の例では削除済みのキー(‘key1’)を指定してdelステートメントを実行していますが、“KeyError”が発生しています。辞書オブジェクトの「clear()メソッド」を使うことで、すべての要素を一度に削除することも可能です。》{}以上が、辞書の基本操作(新規作成・要素の追加/更新)についての解説となります。次節からは、より効率的に辞書を作成することができる「dict()クラス」について解説してきます。辞書をつくるdictクラス<1節>では、辞書オブジェクトは{キー(Key):値(Value)}の形式で作成することができると解説しました。Pythonには辞書を作成するための組込みクラスとして「dictクラス」が関連メソッドとともに用意されており、効率的に辞書を作成することもできます。本節では、dictクラスの活用方法について解説します。引数:**kwargには任意の数の引数を指定することができます。引数の書式は次の書式のように、イテラブルなオブジェクト(タプル、リスト、辞書※)やキーワード引数を指定して使います。「イテラブルなオブジェクト」と「キーワード引数」は組み合わせることも可能です。dictクラスの引数指定の方法それぞれの書式について、具体例で確認します。値)を要素とするリストを引数に指定するパターンです。活用すれば、2つのリストから効率的に辞書を生成することができます。値]を要素とするタプルを引数に指定するパターンです。キーワード引数で指定するパターンです。<List14>キーワードは、文字列で指定してはいけません。辞書を生成する際に、キーワードが文字列として「キー」に登録されます。キーワードを文字列で指定した場合は「SyntaxError」が発生します。引数にはイテラブルなオブジェクトとキーワード引数による指定を混在させることができます。(➈,➉)ただし、キーワード引数はを先頭に置くことはできず、「SyntaxError」が発生します。引数に「キー」と「値」の組合せを指定して辞書オブジェクトを生成するのでした。「dictクラス」には「キー」のみを指定して効率的に辞書を生成できる「fromkeysメソッド」というものもあります。(値もデフォルト(初期値)値として設定できます)「fromkeysメソッド」の書式は次の通りです。辞書オブジェクトdictクラスの「fromkeysメソッド」の使用例を紹介します。「リスト」と「タプル」を指定して辞書の「キー」とする例です。各オブジェクトの要素が展開されそれぞれを「キー」とし、123を初期値とする辞書が生成されました。「文字列」を指定することもできます。文字列が各文字に展開されて「キー」となります。次は、“ABCD”の各文字を「キー」とする、初期値なし(‘None’)とした場合の例です。辞書オブジェクトの関連メソッド辞書オブジェクトには、要素(キーや値)を「取得する」ものであったり、「複製」や「抜き取る」といった関連メソッドがあります。本節では、辞書を使いこなす上で知っておきたい必須メソッドの活用事例を示しています。辞書の要素を取得するメソッドに「keys()メソッド」「values()メソッド」「items()メソッド」があります。値)」を取得することができます。図〇のようにこれらのメソッドの戻り値は「dict_keys型」「dict_value型」「dict_item型」とやや特殊なオブジェクト型となります。keys()/values()/items()メソッドいずれもイテラブルなオブジェクトなので、これらを単独で利用するというよりかは、通常「For文句」や「内包表記」とともに使われることが多い印象です。<List18>の➆では、「For文句」で各要素に展開していますし、➇➈では内包表記により、リスト(List)に変換しています。6]]なお「dict_keys型」「dict_value型」「dict_item型」は、Pythonの標準関数である「list()」や「len()」で処理することもできます。「dict_value型」は「max()/min()/sum()」などといった演算処理も可能です。内包表記については、こちらの記事も参考にして下さい。他言語にはないPython特有の書き方でfor-in構文と[],{}を組み合わせてリスト・辞書・セットオブジェクトの生成を1ステートメントで簡潔に書くことができます。Pythonプログラマーの間では当たり前のように使われている書き方です。複製と要素の抜き取り(copy/pop/popitem)辞書オブジェクトの複製(コピー)は「copy()メソッド」を使います。この複製は複製はいわゆる「深いコピー」のことで、メモリ上の実体(オブジェクト)ごとコピーすることを指します。このことは、複製元と複製先の辞書とは互いに干渉し合うことはありません。図8の左図のように単なる「ラベル」の差し替えではないことに注意しましょう。次の書式のとおりで、引数はありません。具体例を<List19>に示します。ポイントは「オブジェクト(➁)」自体の複製であること「複製元と複製先とは互いに干渉しないこと(➂➃)」です。複製先の要素を変更しても、複製元の要素に影響しない。3}辞書オブジェクトから特定の要素を抜き取るには、「pop()メソッド」とpopitem()メソッド」にて行います。抜き取りは、対象要素(値)の「取得」と「削除(1.3項)」を同時に行うことを指します。図9のように「pop()メソッド」は、抜き取る要素の「キー」を引数で指定することができます。Out])といった違いがあります。pop()/popitem()メソッドの違い両メソッドの書式は以下の通りです。要素が存在しないときに戻す値を指定することができます。設定していない場合は、エラー(‘KeyError’)が発生します。値)で戻す「pop()メソッド」の具体例を<List21>に示します。pop()を繰り返すごとに値を取得した後に、対象の要素がオブジェクトが削除されます。省略することはできません。0次に、「popitem()メソッド」の具体例を<List22>に示します。popitem()を繰り返すごとに、末尾の要素の値を戻し、オブジェクトから要素をさ削除となり<FILO型のスタック>動作となります。よって、14のように引数を指定するとエラーが発呼されます。given)以上、辞書オブジェクトの関連メソッドとして、よく使われるものを厳選して紹介しました。これ以外にも「get()メソッド」や「reversed()関数」などの機能が提供されていますので確認してみてください。まとめいかがでしたでしょうか。今回は、Pythonのデータ構造の一つである「辞書(dict)」について、「基本操作」から「各種メソッド(関数)の使い方」について解説をしてきました。最後に記事内容を整理しておきたいと思います。辞書は「リスト」とともにPythonではよく使われるデータ構図ですが、リストとは次の点で違いや特徴があります。...})で一つの要素を形成する要素の並び順を意識することはない(キーを識別子として各要素にアクセスする)同じキーを重複してもたせることはできない(値は重複できる)このことは、他言語(特にC言語)で強く意識する必要がある「アドレス空間(ポインタ)」をもたないPythonにとって「キー」の指定により、配列要素(※)にアクセスできる「辞書(連想配列)」はその代用となり得えます。※厳密には、配列ではありません。機械学習で使われることが多いPythonにとって学習(教師)データを、正解ラベルとともに管理できる「辞書」のようなデータ構造はよく使われます。今回の記事をお役立てくださいますと幸いです。最後までお読みいただきありがとうございました。2023.03.26Python【Python】タプル(Tuple)の定義~参照・操作をすべて解説【データ構造】Pythonのデータ構造の一つにタプルがあります。リストと似た機能を提供しますが、定義した後の要素は変更ができません。変更されたくない要素を管理するデータ構造となります。本記事ではPythonで使える演算子についてまとめています。ビットについて各種リテラルを扱う演算子があります。オブジェクトを対象にした演算子もあります。「openpyxlライブラリ」にて、Excelの「条件付き書式」を操作する方法を解説します。本記事では「データバー・アイコンセット・カラースケール」の適用例を図解を用いて紹介します。まとめタイトルとURLをコピーしました。