将函数应用于dict中的值

chr*_*ise 47 python dictionary

我想将一个函数应用于dict中的所有值,并将其存储在单独的dict中.我只是想看看我如何使用python并想看看如何重写这样的东西

for i in d:
    d2[i] = f(d[i])
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

d2[i] = f(d[i]) for i in d
Run Code Online (Sandbox Code Playgroud)

编写它的第一种方式当然很好,但我试图弄清楚如何改变python语法

Joe*_*ett 77

如果您使用的是Python 2.7或3.x:

d2 = {k: f(v) for k, v in d1.items()}
Run Code Online (Sandbox Code Playgroud)

这相当于:

d2 = {}
for k, v in d1.items():
    d2[k] = f(v)
Run Code Online (Sandbox Code Playgroud)

除此以外:

d2 = dict((k, f(v)) for k, v in d1.items())
Run Code Online (Sandbox Code Playgroud)

  • +1.请注意,这是创建一个新的字典`d2`而不是修改一个字典.但这几乎总是你真正想做的事情.如果你真的需要更新`d2`,你可以随时做`d2.update({k:f(v)代表k,v代表d1.items()})`. (18认同)

Jab*_*Jab 8

你可以使用map

d2 = dict(d, map(f, d.values()))
Run Code Online (Sandbox Code Playgroud)

如果您不介意使用扩展程序。valmap您还可以在toolz库中使用,其功能相当于使用该map解决方案:

from toolz.dicttoolz import valmap

d2 = valmap(f, d)
Run Code Online (Sandbox Code Playgroud)

如果不是为了方法的简洁呈现,您还可以选择提供默认返回类,以供需要dict.


Ale*_*yev 5

d2 = dict((k, f(v)) for k,v in d.items())
Run Code Online (Sandbox Code Playgroud)


use*_*737 5

字典可以嵌套在 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
Run Code Online (Sandbox Code Playgroud)

进而

d2 = myfun(d)
Run Code Online (Sandbox Code Playgroud)