Python入門
辞書(dict型)

Pythonの初心者向け入門解説、人気のプログラミング言語Python
公開日:2020-09-16 最終更新日:2020-09-16

第11回.辞書(dict型)


「辞書」は、キーと値をセットで登録できるデータ型です。
「連想配列、ハッシュ、マップ」このような呼び方をされるものです。
多くのプログラミング言語においてデータを高速に取り出す手段として辞書がサポートされています。
Pythonでは辞書を扱うためのデータ型としてdict型があります。


目次

辞書(dict型)とは

Pythonの辞書を扱うデータ型はdict型になります。
公式ドキュメント - マッピング型 --- dict
辞書(dict)はマッピングオブジェクトとも呼ばれます。
辞書(dict)はミュータブルなオブジェクトです。
標準のマッピング型は辞書 (dict型) だけです。

ハッシュ可能(後述)な値を任意のオブジェクトに対応付けます。
辞書を使う事でキーと値をセットで扱う事が出来ます。
キーの重複は許されません、辞書内で唯一の値である必要があります。

辞書はキーと値のセットを,カンマ区切りにして{}波括弧で囲んで作成します。
{キー1:値1, キー2:値2, キー3:値3, ・・・}

Python 辞書 dict型

辞書のキーとして使用できるデータ型

辞書のキーは、ほぼ任意の値ですが、
ハッシュ可能でない値、つまり、リストや辞書その他のミュータブルな型はキーとして使用できません。
※タプルはイミュータブルであり、ハッシュ可能なオブジェクトなので辞書のキーとして使用できます。

キーとして使われる数値型は通常の数値比較のルールに従います。
もし2つの数値が (例えば1と1.0) 等しければ、同じ辞書の項目として互換的に使用できます。
(ただし、コンピュータは浮動小数点数を近似値として保管するので、辞書型のキーとして使用するのは好ましくありません。)

Python 辞書 dict型

1と1.0は同一とみなされ、より後ろが辞書に保管されます。


辞書のいろいろな作成方法

辞書はキーと値のセットを,カンマ区切り{}波括弧で囲んで作成する以外に、
以下の方法でも作成することができます。

dict()関数

dict関数には引数の指定方法が3通りあります。
・キーワードと値で更新
udate(キーワード1=値1,キーワード2=値2,・・・)
・キーと値の組み合わせたイテラブル (タプルまたは長さが2のイテラブル) で更新
update(長さが2のイテラブル)
・キーと値それぞれのリストからzip()関数を使い作成
update(zip(イテラブル1, イテラブル2))
zip()関数は、それぞれのイテラブルから要素を集めたイテレータを作る組み込み関数です。

Python 辞書 dict型

fromkeys()メソッド

dictのメソッドです。

fromkeys(iterable[, value])

キーとして使用するシーケンスと値でdictを作成します。
valueを省略した場合は、Noneになります。

Python 辞書 dict型


辞書にキーが存在するかの確認

辞書にキーが存在するかの確認には、innot inを使用します。
inとnot inはコンテナオブジェクトに対して、左辺の値が右辺の要素に含まれているかどうかを判定します。

左辺の文字列が右辺の辞書に含まれるかどうかを評価します。
inは、含まれていればTrue
not inは、含まれていなければTrue

Python 辞書 dict型

大文字小文字が区別されます。

辞書からキー指定で値を取得

キーを指定して辞書から値を取得するには、

辞書変数[キー]

これでキーに対応した値を取得できます。
ただし、キーが辞書に存在しない場合はエラーになります。
※大文字小文字が区別されます。

Python 辞書 dict型

get()メソッド

キーが存在しないとエラーになるため、辞書から取得する前にinで存在確認する必要がありますが、
get()メソッドを使う事で、存在しない場合の値を指定して取得できます。

get(key[, default])

keyが辞書にあればkeyに対する値を、なければdefaultを返します。
defaultが省略された場合はNoneとなります。

Python 辞書 dict型


辞書への追加/変更

辞書に追加登録したり登録済の値を変更するには、

辞書変数[キー] = 値

これで辞書に無ければ登録され、辞書に存在していれば値が変更されます。

Python 辞書 dict型

setdefault()メソッド

辞書にない場合だけ登録したい場合はsetdefault()メソッドを使います。

setdefault(key[, default])

defaultの省略値はNoneです。
以下では、2回目のsetdefault()メソッドは無視されています。

Python 辞書 dict型

update()メソッド

3通りの指定方法があります。
・キーワードと値で更新
udate(キーワード1=値1,キーワード2=値2,・・・)
・キーと値の組み合わせたイテラブル (タプルまたは長さが2のイテラブル) で更新
update(長さが2のイテラブル)
・他の辞書のキーと値で更新
update(他の辞書)

Python 辞書 dict型


辞書から削除

del文

del文を使いキーを指定して削除できます。

Python 辞書 dict型

pop()メソッド

pop(key[, default])

keyが辞書に存在すればその値を辞書から消去して返します。
辞書になければdefaultを返します。
defaultが省略され、かつkeyが辞書に存在しなければエラーになります。

Python 辞書 dict型

popitem()メソッド

任意の(key, value)の対を辞書から消去して返します。
(key, value)の対は、LIFO(後入先出、バージョン 3.7から)の順序で返されます。

Python 辞書 dict型

上の結果が後ろから取得削除されていることを確認してください。

clear()メソッド

辞書を全消去します。

Python 辞書 dict型


辞書ビューオブジェクトとfor文

keys()メソッドは、辞書のキーの新しいビューを返します。
values()メソッドは、辞書の値の新しいビューを返します。
items()メソッドは、辞書の項目 ((key, value) 対) の新しいビューを返します。
公式ドキュメント - 辞書ビューオブジェクト
ビューはイテラブルオブジェクトとして、for文で扱う事が出来ます。

dic1 = {"Python":1,"VBA":2,"GAS":3,"C++":4,"C#":5}
print(dic1)
print("\n省略はkeys()")
for v in dic1:
    print(v)
print("\nkeys()")
for v in dic1.keys():
    print(v)
print("\nvalues()")
for v in dic1.values():
    print(v)
print("\nitems")
for v in dic1.items():
    print(v)
Python 辞書 dict型


辞書(dict型)のコピー

辞書のコピーを作成します。

Python 辞書 dict型

変数dic1の辞書をコピーして変数dic2に代入しています。
コピーによって新たな辞書(dict型)オブジェクトが作成されます。
ただし、
copy()メソッドはshallowコピーです、deepコピーではありません。
辞書の要素に他のオブジェクトを含む場合(複合オブジェクト)、
要素として含まれる他のオブジェクトは、コピー元とコピー先で同一のオブジェクトを参照します。

Python 辞書 dict型

ディープコピーを行うには、copyモジュールのdeepcopy()メソッドを使用します。

Python 辞書 dict型
※importについては、後々に詳しく説明します。

ここはオブジェクトに対する相応の理解が必要です。
もし理解しきれない場合は、
浅いコピーと深いコピーがあるということと、その挙動の違いを覚えておけば良いと思います。




同じテーマ「Python入門」の記事

第8回.文字列操作(str型)
第9回.リスト(list型、配列)
第10回.タプル(tuple型、イミュータブル)
第11回.辞書(dict型)
第12回.組み込み関数一覧
第13回.関数の定義(def文)と引数
第14回.関数内関数(関数のネスト)とスコープ
第15回.lambda(ラムダ式、無名関数)と三項演算子
第16回.Pythonの引数は参照渡しだが・・・
第17回.リスト内包表記
第18回.例外処理(try文)とexception一覧


新着記事NEW ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ