首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python字典中的值之间映射

在python字典中的值之间映射
EN

Stack Overflow用户
提问于 2012-09-01 23:31:37
回答 5查看 352.4K关注 0票数 296

给定一个字典{ k1: v1, k2: v2 ... },我希望在传递函数f的情况下获得{ k1: f(v1), k2: f(v2) ... }

有这样的内置函数吗?或者我必须要做

代码语言:javascript
复制
dict([(k, f(v)) for (k, v) in my_dictionary.iteritems()])

理想情况下,我只需要写

代码语言:javascript
复制
my_dictionary.map_values(f)

代码语言:javascript
复制
my_dictionary.mutate_values_with(f)

也就是说,对我来说,无论是原始字典发生了变化还是创建了一个副本都无关紧要。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-01 23:33:08

没有这样的函数;要做到这一点,最简单的方法是使用字典理解:

代码语言:javascript
复制
my_dictionary = {k: f(v) for k, v in my_dictionary.items()}

在Python2.7中,使用.iteritems()方法代替.items()来节省内存。字典理解语法直到python2.7才被引入。

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

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

代码语言:javascript
复制
my_dictionary = dict(map(lambda kv: (kv[0], f(kv[1])), my_dictionary.iteritems()))

但这并不是那么可读,真的。

票数 438
EN

Stack Overflow用户

发布于 2014-05-16 04:16:40

这些工具对于这种简单但重复的逻辑非常有用。

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

把你带到你想去的地方。

代码语言:javascript
复制
import toolz
def f(x):
  return x+1

toolz.valmap(f, my_list)
票数 35
EN

Stack Overflow用户

发布于 2014-08-24 16:36:21

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

代码语言:javascript
复制
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中的结果包含:

代码语言:javascript
复制
{'a': 2, 'b': 3}
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12229064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档