将函数应用于 dict 中的值

我希望将一个函数应用于 dict 中的所有值,并将其存储在一个单独的 dict 中。我只是想看看如何我可以玩巨蟒,并想看看我可以重写这样的东西

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

比如说

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

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

72304 次浏览
d2 = dict((k, f(v)) for k,v in d.items())

如果你正在使用 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())

字典可以嵌套在 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)

你可以使用 map:

d2 = dict(d, map(f, d.values()))

如果你不介意用分机的话。您还可以在 傻瓜库中使用 valmap,这在功能上等同于使用 map解决方案:

from toolz.dicttoolz import valmap

d2 = valmap(f, d)

如果不是因为方法的简洁表示,您还可以选择为需要 dict以外的东西的人提供默认返回类。