我想对字典中的所有值应用一个函数,并将其存储在一个单独的字典中。我只是想尝试一下如何使用Python,并想看看如何重写类似于这样的东西。
for i in d:
d2[i] = f(d[i])
变成类似于
d2[i] = f(d[i]) for i in d
第一种写法当然没问题,但我正在尝试弄清楚Python语法可以如何改变
for i in d:
d2[i] = f(d[i])
变成类似于
d2[i] = f(d[i]) for i in d
第一种写法当然没问题,但我正在尝试弄清楚Python语法可以如何改变
如果您正在使用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 = dict((k, f(v)) for k,v in d.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
,而不是直接修改原有字典。但这通常是您实际想要做的。如果您确实需要直接在原有字典上进行更新,则可以使用d2.update({k: f(v) for k, v in d1.items()})
。 - abarnert