您不想map
用于更新任何类型的序列;那不是它的用途。map
用于生成新序列:
dict2 = dict(map(func, dict1.iteritems()))
当然func
,必须采取(key, old_value)
并返回(key, new_value)
才能按原样工作。如果它只是返回,比如说,new_value
你需要以某种方式将它包装起来。但在这一点上,你可能最好使用字典理解而不是map
调用和dict
构造函数:
dict2 = {key: func(value) for key, value in dict1.itervalues()}
如果你想使用map
,并且你想改变,你可以通过创建一个更新事物的函数来做到这一点,如下所示:
def func_wrapped(d, key):
d[key] = func(d[key])
map(partial(func_wrapped, d), dict1)
(如果你真的想要,这甚至可以通过使用partial
with来完成。)d.__setitem__
但这是一件愚蠢的事情。一方面,这意味着您正在构建一个值列表,只是为了将它们丢弃。(或者,在 Python 3 中,除非您编写一些迭代迭代器的代码,否则您实际上并没有做任何事情map
。)但更重要的是,您无缘无故地让事情变得更加困难。如果您不需要就地修改内容,请不要这样做。如果您确实需要就地修改内容,请使用for
循环。
PS,我并不是说这是一个愚蠢的问题。还有其他语言确实具有map
类似的变异函数,因此在 C++ 中做这件事不会是一件愚蠢的事情。它只是不是pythonic,如果不问你就不会知道。