##
2.3.7 マップ型

mapping オブジェクトは変更不可能な値を任意のオブジェクトに 対応付けます。対応付け事態は変更可能なオブジェクトです。 現在のところは標準のマップ型、dictionary だけです。 辞書のキーにはほとんど任意の値をつかうことができます。使うことが できないのはリスト、辞書、その他の変更可能な型 (オブジェクトの一致 ではなく、その値で比較されるような型) です。 キーに使われた数値型は通常の数値比較規則に従います: 二つの数字を 比較した時等価であれば (例えば `1` と `1.0` のように)、 これらの値はお互いに同じ辞書のエントリを示すために使うことが できます。

辞書は `key: value` からなるペアを カンマで区切ったリストを波括弧の中に入れて作ります。 例えば: `{'jack': 4098, 'sjoerd': 4127}` または `{4098: 'jack', 4127: 'sjoerd'}` です。

以下の操作がマップ型で定義されています (ここで、a および b はマップ型で、k はキー、 v および x は任意の オブジェクトです):

操作 | 結果 | 注釈
--- | --- | ---
`len(a)` | a 内の要素の数です |
`a[k]` | キー k を持つa の要素です | (1)
`a[k] = v` | `a[k]` を v に設定します |
`del a[k]` | a から `a[k]` を削除します | (1)
`a.clear()` | `a` から全ての要素を削除します |
`a.copy()` | `a` の(浅い)コピーです |
`a.has_key(k)` | a にキー k があれば `True` 、 そうでなければ `False` です |
`k `in` a` | a.has_key(k) と同じです | (2)
`k not in a` | `not` a.has_key(k) と同じです | (2)
`a.items()` | a における (key, value) ペアのリストのコピーです | (3)
`a.keys()` | a におけるキーのリストのコピーです | (3)
`a.update(b)` | `for k in b.keys(): a[k] = b[k]` |
`a.fromkeys(seq[, value])` | seq からキーを作り、値が value であるような、新しい辞書を作成します | (7)
`a.values()` | a における値のリストのコピーです | (3)
`a.get(k[, x])` | `a[k]` if `k in a`, else x | (4)
`a.setdefault(k[, x])` | `a[k]` if `k in a`, else x (also setting it) | (5)
`a.pop(k[, x])` | `a[k]` if `k in a`, else x (and remove k) | (8)
`a.popitem()` | 任意の (key, value) ペアを除去して返します | (6)
`a.iteritems()` | (key, value) ペアにわたるイテレータを返します | (2), (3)
`a.iterkeys()` | マップのキー列にわたるイテレータを返します | (2), (3)
`a.itervalues()` | マップの値列にわたるイテレータを返します | (2), (3)

注釈:

(1)
  k がマップ内にない場合、例外 `KeyError` を 送出します。
(2)
  バージョン2.2 以降で新規追加された 仕様です。

(3)
  キー及び値はランダムな順番でリストになっています。 途中で辞書を変更せずに `items()`、 `keys()`、 `values()`、 `iteritems()`、 `iterkeys()`、 and `itervalues()` を呼んだ場合、返されるリストは直接対応しています。これにより、 `(value, key)` のペアを `zip()` を 使って: "`pairs = zip(a.values(), a.keys())`" のように生成することができます。`iterkeys()` および `itervalues()` メソッドの間でも同じ関係が成り立ちます: "`pairs = zip(a.itervalues(), a.iterkeys())`" は `pairs` と同じ値になります。 同じリストを生成するもう一つの方法は "`pairs = [(v, k) for (k, v) in a.iteritems()]`"です。

(4)
  k がマップ中になくても例外を送出せず、代わりに x を返します。x はオプションです; x が与えられて おらず、かつ k がマップ中になければ、 `None` が返されます。

(5)
  `setdefault()` は `get()` に似ていますが、 k が見つからなかった場合、x が返されると同時に辞書の k に対する値として挿入されます。

(6)
  `popitem()` は、集合アルゴリズムでよく行われる ような、辞書を取り崩しながらの反復を行うのに便利です。

(7)
  `fromkeys()` は、新しい辞書を返すクラスメソッドです。 value のデフォルト値は `None` です。 バージョン2.3 以降で新規追加された 仕様です。

(8)
  `pop()` は、デフォルト値が渡されず、かつ、キーが見つからない場合に、 `KeyError` を送出します。 バージョン2.3 以降で新規追加された 仕様です。