まくまくPythonノート
dictionary にキーが存在しない場合のみ新しい値を格納する (setdefault)
2013-06-15

dictionary に値をセットするときに、まだそのキーが存在しない場合だけ新しい値をセットしたいというときには、dict.setdefault() メソッドを使用します。 setdefault() メソッドは、既にキーが存在している場合は格納されている値、存在しない場合は第二引数で指定した値を返します。

val = d.setdefault('key', 'default_value')

つまり、dict.setdefault() は、「dict.get() を行いつつ、存在しないキーを指定した場合は、値のセットまで行う」という振る舞いをします。 例えば、dictionary のあるキーに対する値としてリストを格納したい場合に、下記のようにしてそのリストを参照するようにすれば、キーがまだ存在しないときに自動的にリストを生成、格納してくれるようになります。

d = {}
l = d.setdefault('key', [])  # このキーは存在しないので初期値として空リストを格納し、さらにその参照を返す
l.append(100)  # d['key'] が [100] になる

もう一度、同じキー key で参照しようとすると、今度はすでに dictionary に格納されているリストへの参照を取得することができます。

l = d.setdefault('key', [])  # このキーは既に存在しているので、格納されているリスト [100] の参照を返す
l.append(200)  # d['key'] は [100, 200] になる

get() メソッドでデフォルト値を指定しておく方法と似ていますが、get() の場合はデフォルト値が返されるケースで、dictionary オブジェクトにそのデフォルト値が格納されない点が異なります。

l = d.get('key', [])
l.append(100)
d['key'] = l  # デフォルト値が生成されたときのために dictionary に格納する必要がある
2013-06-15