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 に格納する必要がある