Pythonで上書きせずに辞書をマージする

dict_a.update(dict_b)だと、dict_aの値をdict_bの値で上書きしてしまうので、上書きしないでマージする方法を調べてた。

# coding=utf-8


DEFAULT_OPTIONS = {'foo': 1, 'bar': 2}


def sample_method(options=None):
    if not options:
        options = {}

    # 入力値を上書きしてしまう
    # options.update(default_options)

    # 入力値に不足があればdefault値を設定する
    options = dict(DEFAULT_OPTIONS.items() + options.items())

    # do something..
    print options


sample_method()
#=> {'foo': 1, 'bar': 2}
sample_method(dict(foo=2))
#=> {'foo': 2, 'bar': 2}
sample_method(dict(foo=2, bar=3))
#=> {'foo': 2, 'bar': 3}
sample_method(dict(foo=2, bar=3, hoge=4))
#=> {'foo': 2, 'bar': 3, 'hoge': 4}

一応それっぽい動きになった