Python/辞書

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

辞書[編集]

基本[編集]

pythonの辞書(Dictionary ディクショナリー)とは、下記のように「キー」と「値」という2つの要素のペアです。

宣言の方法は、

辞書名 = {キー名1: 値1, キー名2: 値2, キー名3: 値3}

のように宣言します。

>>> { 'zero': 0, 'one': 1, 'two': 2 }
{'zero': 0, 'two': 2, 'one': 1}


辞書のそれぞれの要素の値にアクセスするには、辞書名とキー(key)を指定してアクセスすることで、値(value)を表示することができます。

他の言語(JavaScriptやGo言語など)では、このような仕組みのこの部分を「キー」および「値」(value)といいます。

pythonコミュニティでも同様「key : value」の用語である[1]。日本語訳では「キー:値」のように翻訳するのが一般的です。(コンピュータ界隈にかぎらず、数学でも value を「値」と翻訳する。)


コード例
# 辞書のテスト
di = {"氏名": "山田タロウ", "国語": 80, "数学": 70}

print(di["国語"])


結果
80
解説

pythonの辞書の書式は、波カッコ { }でくくられ、カンマ「,」で区切られ、コロン「:」の左側が key 、コロン「:」の右側が value である。

di["氏名"]di["simei"] のように

辞書名["keyの名称"]

によって、そのkeyに対応するvalueを表せる。

その他[編集]

  • 辞書全体の表示

辞書全体を表示するには、キーを指定せずに、単に辞書名だけを print関数の引数にすれば充分です。

コード例
# 辞書のテスト
di = {"氏名": "山田タロウ", "国語": 80, "数学": 70}

print(di)


結果
{'氏名': '山田タロウ', '国語': 80, '数学': 70}


  • 改行やインデント

見やすくしようと辞書の各キーと値を改行しても動作する。


# 辞書のテスト
di = {
    "氏名": "山田タロウ",
    "国語": 80,
    "数学": 70 ,
}

print(di["数学"])
結果
70

実は、辞書内はインデントなしで改行しただけでも、動作する。

さらに、インデントする場合でも、実は辞書内のインデントはそろえなくても動作するが(Fedora32 で 6月 に確認)、まぎらわしいので、辞書内でもインデントをそろえておくのが無難だろう。


  • GUIでも動作

GUIでも下記コードのように辞書の結果を表示可能である。

# coding: shift-JIS
import tkinter

root = tkinter.Tk()

# 辞書のテスト
di = {"氏名": "山田タロウ", "国語": 80, "数学": 70}

# ラベル関係

stren1 = di["氏名"]
label = tkinter.Label(root, text=stren1)
label.place(x=50, y=30)

root.mainloop()


結果
「山田タロウ」と書いてある新規ウィンドウが表示される。


理論や背景[編集]

関連事項[編集]

pythonに限らず一般に、

{"氏名": "山田タロウ" , "国語": 80 , "数学": 70 }

のような書式のデータ構造は、各部の用語で

{ key : value , key2 : value2 , key3 : value3 }

のように、コロンの左右で働きが違う。(たとえば JavaScript のデータ構造の表現形式のひとつである JSON でも同様。)※ JSONについては詳しくはwikibooks『JavaScript/JSON』を参照せよ。python以外なので、深入りは避ける。


備考

python では、辞書のキーに、重複は許されてしまう。(Fedora32で2020年6月12日に確認ずみ。)

# 国語が重複している
di = {"氏名": "山田タロウ", "国語": 80, "国語": 70 }

print(di["国語"])
(※ Fedora32で2020年6月12日にキー重複していても動作することを確認ずみ。)
結果
70


しかし、一般に他のプログラム言語では、キーの重複を禁止している場合が普通である(Go言語など)。

なので、まぎらわしいので、pythonでもなるべくキーの重複はさけるべきだろう。

詳細[編集]

pythonの辞書は連想配列でありオブジェクトです。 タプルは対でありリストです。


ところで、文字列は配列と同じようにアクセスすることができます。配列のスライスはブラケットの中で:演算子を使用します。

>>> "Hello, world"[7:]
'world'


pythonの辞書の特徴として、対話モード(コマンド端末などで1行ずつ実行するモード)では、辞書の値を変更できたり、辞書にペアを追加したり、ペアを削除したりできる。

たとえば

del 辞書名["キー"]

で、そのキーをもつペアのキーと削除の両方を削除できる。

削除コマンドで、キーだけを削除することはできない。python にかぎらず、一般に、SQLなどのデータベース管理ソフトでも、削除コマンドでは、そのペア全体を消す仕様なのが一般的である。

なお、pythonの場合、値の上書きコマンドがあるので、これを用いて値を空白として上書きすれば、結果的に、あるキーの値だけ削除したことと同等の結果にすることもできる。

python公式サイトの日本語コミュニティに辞書型の説明があるので

python公式サイト: 『2. Python インタプリタを使う — Python 3.8.2 ドキュメント』

くわしくは、それを参照せよ。

  1. ^ Bill Lubanovic 著『入門python3』,OREILLY、斉藤康毅 監訳、長尾高弘 訳、2017年2月3日 初版 第6刷発行、69ページ、