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 回答
6

你可以使用map

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

如果您不介意使用扩展程序。您还可以valmaptoolz库中使用,它在功能上等同于使用map解决方案:

from toolz.dicttoolz import valmap

d2 = valmap(f, d)

如果不是为了清晰地展示该方法,您还可以选择提供默认返回类,以供需要dict.

于 2019-02-22T14:17:26.880 回答
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 回答