ひきメモ

2007-12-07

[]辞書オブジェクト

辞書オブジェクトとは、キーを使って複数のオブジェクトをまとめるものです。キーには数値や文字列、タプル(変更不能なリスト)などの変更不能なオブジェクトが使えます。ただし、タプルの要素がリストのような変更可能なオブジェクトの場合はキーに使えません。


作成

>>> nums = {"one":1,"two":2, "three":3}
>>> nums
{'three': 3, 'two': 2, 'one': 1} # リストと違って並び順はバラバラ

dict( )を使うとキーと値のペアのリストまたはタプルから辞書オブジェクトを作成することができます。

>>> nums = dict((("one", 1), ("two", 2), ("three", 3)))
>>> nums
{'three': 3, 'two': 2, 'one': 1}

zip( )を使うとキーと値のリストから辞書オブジェクトを作成することができます。zip( )は二つのリストまたはタプルから、タプルのリストを返します。

>>> zip(["a", "b", "c"], [1, 2, 3])
[('a', 1), ('b', 2), ('c', 3)]

>>> nums = dict(zip(("one", "two", "three"), (1, 2, 3)))
>>> nums
{'three': 3, 'two': 2, 'one': 1}

キーが文字リテラルだけなら、以下のように書くこともできます。

>>> nums = dict(one=1, two=2, three=3) # キーをクォートで囲むとエラー
>>> nums
{'three': 3, 'two': 2, 'one': 1}

検索

>>> nums = {"one":1,"two":2, "three":3}

# キーの有無を調べる
>>> nums.has_key("two")
True

# キーが存在すればTrue
>>> "five" in nums
False

# キーが存在しなければTrue
>>> "five" not in nums
True

取り出す

>>> nums = {"one":1, "two":2, "three":3}

>>> nums["one"]
1

# キーが存在しなければエラー
>>> nums["five"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'five'

# get()を使えばエラーにならない
>>> n = nums.get("five")
>>> print n
None

# キーが存在しない場合のデフォルト値も指定できる
>>> nums.get("one", 0)
1
>>> nums.get("five", 0)
0

追加、変更

>>> nums = {"one":1, "two":2, "three":4}

# キーが存在していれば、変更
>>> nums["three"] = 3
>>> nums
{'three': 3, 'two': 2, 'one': 1}

# キーが存在していなければ、追加
>>> nums["four"] = 4
>>> nums
{'four': 4, 'three': 3, 'two': 2, 'one': 1}

# 別の辞書オブジェクトで上書きする
>>> nums = {"one":3, "two":2}
>>> nums.update({"one":1, "three":3})
>>> nums
{'three': 3, 'two': 3, 'one': 1}

削除

>>> nums = {"one":1, "two":2, "three":3}

>>> del nums["two"]
>>> nums
{'three': 3, 'one': 1}

# 削除した値を返す
>>> nums.pop("one")
1
>>> nums
{'three': 3}

# 全ての要素を削除
>>> nums.clear()
>>> nums
{}

>>> nums = dict(one=1, two=2, three=3)
>>> while nums:
        # 要素を一つ削除し、そのキーと値のペアを返す
        # ただし、削除される順番はわからない
...     nums.popitem()
...
('three', 3)
('two', 2)
('one', 1)
>>> nums
{}

キーと値のリストを取り出す

>>> nums = {"one":1, "two":2, "three":3}

# キーのリスト
>>> nums.keys()
['three', 'two', 'one']

# 値のリスト
>>> nums.values()
[3, 2, 1]

キーと値を一つずつ取り出す

>>> nums = {"one":1, "two":2, "tree":3}

# キーを一つずつ取り出す
>>> for k in nums.iterkeys():
...     print k
...
three
two
one

# 値を一つずつ取り出す
>>> for v in nums.itervalues():
...     print v
...
3
2
1

# キーと値のペアを一つずつ取り出す
>>> for p in nums.iteritems():
...     print p
...
('three', 3)
('two', 2)
('one', 1)

# キーと値を別々の変数で受け取る
>>> for k, v in nums.iteritems():
...     print k, "=>", v
...
three => 3
two => 2
one => 1