Python の dictionary(辞書)の基本

Python の dictionary(辞書)は、キーと値のペアで構成されたオブジェクトです。 他の言語では、マップやハッシュと呼ばれていたりします。

dictionary オブジェクトを生成する ({}, dict)

dictionary は {} あるいは、dict() を使って生成できます。 Python の dictionary は、JavaScript のオブジェクトにそっくりです。

空の dictionary を作成する

d = {}      # 空の辞書を作成する
d = dict()  # 別の方法

print(type(d))  #=> <class: 'dict'>
print(len(d))   #=> 0

初期値を持つ dictionary を作成する

dictionary オブジェクトを生成するときに、キーと値のペアを列挙することで、初期値を設定できます。 {} を使った初期化用の構文を使うか、dict() 関数にキーワード引数の形で初期値を指定します。

d = {'one': 1, 'two': 2}  # 初期値を持つ辞書を作成する
d = dict(one=1, two=2)    # 別の方法

print(d['one'])    #=> 1
print(d['two'])    #=> 2
print(d['three'])  #=> KeyError

dictionary の要素を参照・変更する ([], get)

Python で dictionary オブジェクトの要素を参照するには下記のように [] でキーを指定します。 キーが存在しない場合は、KeyError が発生します。

val = d['key']  # 要素を参照する
d['key'] = val  # 要素を追加する

キーが存在しない場合に、デフォルト値を返したい場合は get() メソッドを使用します。

val = d.get('key', default=None)

dictionary の要素数を取得する (len)

Python で dictionary オブジェクトの要素数を調べるには、組み込み関数の len() を使用します。 len() 関数は dictionary のメソッドではないことに注意してください。

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> len(d)
3

ちなみに、listtuple オブジェクトの要素数や、文字列 (str) の文字数を調べる場合も、同様に組み込み関数の len() を使用します。

dictionary に指定したキーが存在するか調べる (in)

Python の dictionary オブジェクトが、指定したキーを持っているかを判別するには、in キーワードを使用します。

if 'key1' in d:
    print('key1 が存在します')
☝️ has_key メソッドはなくなった

Python 2 の頃は、下記のように has_key() メソッドを使用することができましたが、Python 3 以降は in キーワードしか使用できなくなりました。

if d.has_key('key1'):
    print('key1 が存在します')

dictionary の要素を削除する (del)

Python の dictionary から指定したキーの要素を削除するには、del キーワードを使用します。

del d['key']

次のサンプルでは、実際に要素が削除されているかを in で確認しています。

>>> d = {'key1': 100, 'key2': 200}
>>> 'key1' in d
True
>>> del d['key1']
>>> 'key1' in d
False

削除済みの要素を参照しようとするとエラー (KeyError) になります。

>>> d['key1']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'key1'

dictionary をループ処理する

単純なループ

dictionary オブジェクトを for-in ステートメントに渡すと、ループ処理でキーを 1 つずつ取り出すことができます。

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> for key in d:
...     print(key, d[key])
...
two 2
three 3
one 1

キーと値のペアを取り出しながらループ (items)

dictionary オブジェクトをループ処理するときに、キーと値を同時に取り出しながら処理したい時は items() メソッドを使用します。

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> for key, val in d.items():
...     print(key, val)
...
two 2
three 3
one 1

ちなみに、Python 2 の頃は iteritems() メソッドを使用できましたが、Python 3 からは items() メソッドのみ使用可能です。

連番を振りながらループ (enumerate)

enumerate と組み合わせることで、0 から始まる連番を振りながらループ処理することができます(list オブジェクトも同様のループ処理が可能です)。

>>> for i, key in enumerate(d):
...     print('[{}] {}: {}'.format(i, key, d[key]))
...
[0] one: 1
[1] two: 2
[2] three: 3

キーでソートしてループ処理する