使用Python字典中的值来制作映射

2024-03-29 10:51:22 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个字典{ 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)

或者

my_dictionary.mutate_values_with(f)

也就是说,对我来说,原词典是否被修改或是一个副本是否被创建并不重要。


Tags: 函数in功能fordictionary字典myk2
3条回答

没有这样的功能;最简单的方法是使用听写理解:

my_dictionary = {k: f(v) for k, v in my_dictionary.items()}

在python 2.7中,使用.iteritems()方法而不是.items()来保存内存。直到python 2.7才引入dict理解语法。

注意,列表中也没有这样的方法;您必须使用列表理解或map()函数。

因此,您也可以使用map()函数来处理dict:

my_dictionary = dict(map(lambda kv: (kv[0], f(kv[1])), my_dictionary.iteritems()))

但那没那么可读,真的。

您可以就地执行此操作,而不是创建新的dict,这对于大型词典(如果您不需要副本)可能更为可取。

def mutate_dict(f,d):
    for k, v in d.iteritems():
        d[k] = f(v)

my_dictionary = {'a':1, 'b':2}
mutate_dict(lambda x: x+1, my_dictionary)

结果my_dictionary包含:

{'a': 2, 'b': 3}

这些toolz非常适合这种简单而重复的逻辑。

http://toolz.readthedocs.org/en/latest/api.html#toolz.dicttoolz.valmap

把你带到你想去的地方。

import toolz
def f(x):
  return x+1

toolz.valmap(f, my_list)

相关问题 更多 >