【发布时间】:2012-10-25 07:31:49
【问题描述】:
我想将一个函数应用于 dict 中的所有值并将其存储在单独的 dict 中。我只是想看看我如何使用 python 并想看看我如何重写这样的东西
for i in d:
d2[i] = f(d[i])
类似
d2[i] = f(d[i]) for i in d
第一种写法当然没问题,但我想弄清楚如何改变python语法
【问题讨论】:
标签: python dictionary
我想将一个函数应用于 dict 中的所有值并将其存储在单独的 dict 中。我只是想看看我如何使用 python 并想看看我如何重写这样的东西
for i in d:
d2[i] = f(d[i])
类似
d2[i] = f(d[i]) for i in d
第一种写法当然没问题,但我想弄清楚如何改变python语法
【问题讨论】:
标签: python dictionary
如果您使用的是 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())
【讨论】:
d2,而不是就地修改一个字典。但这几乎总是你真正想要做的。如果您确实需要更新d2,您可以随时更新d2.update({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)
【讨论】:
d2 = dict((k, f(v)) for k,v in d.items())
【讨论】: