Python 对dict中的值应用函数

Python 对dict中的值应用函数,python,dictionary,Python,Dictionary,我想对dict中的所有值应用一个函数,并将其存储在一个单独的dict中。我只是想看看如何使用python,以及如何重写类似的内容 for i in d: d2[i] = f(d[i]) 差不多 d2[i] = f(d[i]) for i in d 第一种编写方法当然很好,但我正在试图弄清楚如果您使用的是Python2.7或3.x,如何更改python语法: d2 = dict((k, f(v)) for k,v in d.items()) d2 = {k: f(v) for k,

我想对dict中的所有值应用一个函数,并将其存储在一个单独的dict中。我只是想看看如何使用python,以及如何重写类似的内容

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

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

第一种编写方法当然很好,但我正在试图弄清楚如果您使用的是Python2.7或3.x,如何更改python语法:

d2 = dict((k, f(v)) for k,v in d.items())
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中,在这种情况下,d1.items()}中k,v的解决方案
d2={k:f(v)将不起作用

对于嵌套字典,需要一些函数来横贯整个数据结构。例如,如果允许值本身是字典,则可以定义如下函数:

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)

如果您不介意使用扩展名。您也可以使用自己的
valmap

from toolz.dicttoolz import valmap

d2 = valmap(f, d)

如果不是为了清晰地展示该方法,您还可以选择提供一个默认的返回类,以供需要dict以外的东西的人使用。请注意,这是在创建一个新字典
d2
,而不是就地修改一个字典。但这几乎总是你真正想要做的。如果您确实需要就地更新
d2
,您可以随时执行
d2.update({k:f(v)代表k,v在d1.items()中)
。使用3.x和第二种方法可以很好地工作。正是我想要的。谢谢你的评论。在这种情况下,我需要创建一个新的dict,但在其他情况下知道这一点很好。thanks@abarnert,是否可以更新字典以将函数映射到用户指定键的值而不是所有键的值?