给定一个字典{k1: v1, k2: v2…}我想得到{k1: f(v1), k2: f(v2)…}如果我传递一个函数f。
有这样的内置功能吗?还是我必须
dict([(k, f(v)) for (k, v) in my_dictionary.iteritems()])
理想情况下,我只会写
my_dictionary.map_values(f)
or
my_dictionary.mutate_values_with(f)
也就是说,对我来说,原始字典是否发生了突变或创建了一个副本都无关紧要。
没有这样的函数;最简单的方法是使用字典理解:
my_dictionary = {k: f(v) for k, v in my_dictionary.items()}
在python 2.7中,使用.iteritems()方法代替.items()来节省内存。字典理解语法直到python 2.7才被引入。
注意,在列表上也没有这样的方法;您必须使用列表推导式或map()函数。
因此,你也可以使用map()函数来处理你的字典:
my_dictionary = dict(map(lambda kv: (kv[0], f(kv[1])), my_dictionary.iteritems()))
但这并不是那么可读。