Chapter 3. 組み込みのデータ型

少しの間, 最初の Python プログラムに戻りましょう. しかしまずは少々寄り道をして, 辞書, タプル, リストについて学ばなければなりません (なんと!). もしあなたが Perl ハッカーなら, 辞書とリストについてはささっと読めるかもしれませんが, タプルについては注意を払った方が良いです.

3.1. 辞書の紹介

Python の組み込みのデータ型の 1 つが辞書で, それを使ってキーと値の 1 対 1 の関係を定義します.

Note
Python の辞書は Perl のハッシュに似ています. Perl では, ハッシュを値に持つ変数は常に % という文字から始まります. Python では変数名は任意であり, Python は内部的にデータ型を把握しています.
Note
Python の辞書は JavaHashtable クラスのインスタンスに似ています.
Note
Python の辞書は Visual BasicScripting.Dictionary オブジェクトのインスタンスに似ています.

3.1.1. 辞書の定義

Example 3.1. 辞書の定義

>>> d = {"server":"mpilgrim", "database":"master"} 1
>>> d
{'server': 'mpilgrim', 'database': 'master'}
>>> d["server"]                                    2
'mpilgrim'
>>> d["database"]                                  3
'master'
>>> d["mpilgrim"]                                  4
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
KeyError: mpilgrim
1 まず最初に, 2 つの要素を持つ辞書を作り, それを変数 d に代入します. それぞれの要素はキーと値の組で, 全ての要素は波括弧で括られます.
2 'server' はキーであり, d["server"] と参照されるそれに結び付いた値は 'mpilgrim' です.
3 'database' はキーであり, d["database"] と参照されるそれに結び付いた値は 'master' です.
4 キーから値を得ることはできますが, 値からキーを得ることはできません. なので d["server"]'mpilgrim' ですが, d["mpilgrim"]'mpilgrim' がキーではないので, 例外を送出します.

3.1.2. 辞書の変更

Example 3.2. 辞書の変更

>>> d
{'server': 'mpilgrim', 'database': 'master'}
>>> d["database"] = "pubs" 1
>>> d
{'server': 'mpilgrim', 'database': 'pubs'}
>>> d["uid"] = "sa"        2
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
1 辞書に二重にキーを登録することはできません. 存在するキーに値を結び付けようとすると古い値が取り除かれてしまいます.
2 辞書にはいつでも新しいキーと値のペアを追加することができます. これは既存の値を変更する文法と全く同一のものです. (そうこれのせいで, 新しい値を追加しようとしているのに思う通りにキーが変わってくれない場合, 実際は同じ値を何度も何度も変更しているだけになってしまいあなたを悩ますかもしれません.)

新しい要素 (キー 'uid', 値 'sa') が真ん中に現れているのに注意しましょう. 実際, 最初の例で要素が順番どおりに現れたのは単なる偶然ですし, 同様に今順番どおりでなく現れているのも単なる偶然です.

Note
辞書には要素間の順序という考えはありません. なので, 要素の“順序が狂った”と言うのは正しくありません. ただ単に順序付けされていないだけです. (例えばキーによるアルファベット順のように) ある特定の順序で辞書の要素に何度もアクセスしたい場合に, この重要な違いは悩ましいものかもしれません. そうする方法は実際にはあるのですが, 辞書に組み込まれてはいません.

辞書を使っているときには, 辞書のキーが大文字小文字を区別することに気を付けなくてはいけません.

Example 3.3. 辞書のキーは大文字と小文字を区別する

>>> d = {}
>>> d["key"] = "value"
>>> d["key"] = "other value" 1
>>> d
{'key': 'other value'}
>>> d["Key"] = "third value" 2
>>> d
{'Key': 'third value', 'key': 'other value'}
1 辞書の既存のキーに値を結び付けると古い値が新しい値で置き換わります.
2 これは辞書の既存のキーに値を結び付けているのではありません. なぜなら, Python の文字列は大文字小文字を区別するので, 'key''Key' と等しくないからです. なので, 辞書に新しいキーと値の組が追加されます. 同じように見えるかもしれませんが, Python に限って言えば, これらは完全に違うものです.

Example 3.4. 辞書でのデータ型の混在

>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
>>> d["retrycount"] = 3 1
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
>>> d[42] = "douglas"   2
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
42: 'douglas', 'retrycount': 3}
1 辞書は文字列だけしか扱えないのではありません. 辞書の値は文字列や整数やオブジェクトや他の辞書などどんなデータ型でも構いません. また 1 つの辞書の中で, 全ての値が同じ型である必要は無く, 必要に応じて混在させることができます.
2 辞書のキーに関してはもう少し制限がありますが, 文字列や整数やその他いくつかのデータ型が使えます. また 1 つの辞書の中でキーのデータ型も混在させることができます.

3.1.3. 辞書から要素を削除

Example 3.5. 辞書から要素を削除

>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
42: 'douglas', 'retrycount': 3}
>>> del d[42] 1
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
>>> d.clear() 2
>>> d
{}
1 del はキーで指定された辞書の要素を個別に削除します.
2 clear は辞書の要素を全て削除します. 中身が空の波括弧の組は要素が 1 つも無い辞書を表していることに注意してください.

辞書についてさらに知るには