70

dict のすべての値に関数を適用し、それを別の dict に保存したいと思います。私はちょうどPythonで遊ぶ方法を見ようとしていて、このようなものを書き直す方法を見たいと思っています

for i in d:
    d2[i] = f(d[i])

のようなものに

d2[i] = f(d[i]) for i in d

最初の書き方はもちろん問題ありませんが、python構文をどのように変更できるかを理解しようとしています

4

4 に答える 4

107

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())
于 2012-10-25T07:33:48.683 に答える
5
d2 = dict((k, f(v)) for k,v in d.items())
于 2012-10-25T07:33:32.930 に答える
4

辞書は 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)
于 2015-01-21T19:03:37.787 に答える