map
いかなる種類のシーケンスの更新にも使用したくありません。それはそれが何のためであるかではありません。map
新しいシーケンスを生成するためのものです。
dict2 = dict(map(func, dict1.iteritems()))
もちろん、これがそのまま機能するためfunc
には、を取り戻さなければなりませ(key, old_value)
ん(key, new_value)
。それがちょうど戻った場合、たとえば、new_value
あなたはそれを何らかの方法でまとめる必要があります。map
しかし、その時点では、呼び出しやdict
コンストラクターよりも辞書を理解したほうがよいでしょう。
dict2 = {key: func(value) for key, value in dict1.itervalues()}
を使用したい場合map
、および変更したい場合は、次のように更新する関数を作成することで実行できます。
def func_wrapped(d, key):
d[key] = func(d[key])
map(partial(func_wrapped, d), dict1)
(これは、本当に必要な場合はpartial
、withを使用してワンライナーとして実行することもできます。)d.__setitem__
しかし、それはばかげたことです。一つには、それはあなたがそれらを捨てるためだけに値のリストを構築していることを意味します。(または、Python 3では、イテレーターを反復処理するコードを記述しない限り、実際には何もmap
していません。)しかし、さらに重要なことは、正当な理由もなく、自分自身で物事を難しくしていることです。その場で物事を変更する必要がない場合は、それを行わないでください。その場で物事を変更する必要がある場合は、for
ループを使用してください。
PS、私はこれが愚かな質問だと言っているのではありません。ミューティング関数のような機能を備えた言語は他map
にもあるので、たとえばC++で行うのはばかげたことではありません。それは単にpythonicではありません、そしてあなたは尋ねなければそれを知りません。