dict のすべての値に関数を適用し、それを別の dict に保存したいと思います。私はちょうどPythonで遊ぶ方法を見ようとしていて、このようなものを書き直す方法を見たいと思っています
for i in d:
d2[i] = f(d[i])
のようなものに
d2[i] = f(d[i]) for i in d
最初の書き方はもちろん問題ありませんが、python構文をどのように変更できるかを理解しようとしています
dict のすべての値に関数を適用し、それを別の dict に保存したいと思います。私はちょうどPythonで遊ぶ方法を見ようとしていて、このようなものを書き直す方法を見たいと思っています
for i in d:
d2[i] = f(d[i])
のようなものに
d2[i] = f(d[i]) for i in d
最初の書き方はもちろん問題ありませんが、python構文をどのように変更できるかを理解しようとしています
Python 2.7 または 3.x を使用している場合:
d2 = {k: f(v) for k, v in d1.items()}
これは次と同等です:
d2 = {}
for k, v in d1.items():
d2[k] = f(v)
さもないと:
d2 = dict((k, f(v)) for k, v in d1.items())
d2 = dict((k, f(v)) for k,v in d.items())
辞書は Python でネストできますが、この場合、ソリューションd2 = {k: f(v) for k, v in d1.items()}
は機能しません。
ネストされた辞書の場合、データ構造全体を横切る何らかの関数が必要です。たとえば、値自体が辞書になることが許可されている場合、次のような関数を定義できます。
def myfun(d):
for k, v in d.iteritems():
if isinstance(v, dict):
d[k] = myfun(v)
else:
d[k] = f(v)
return d
その後
d2 = myfun(d)