映射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)

也就是说,如果原始字典被改变或创建了副本,对我来说无关紧要。

6个解决方案

251 votes

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

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

在python 2.7中,使用map()方法代替.items()来节省内存。 直到python 2.7才引入dict理解语法。

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

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

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

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

Martijn Pieters answered 2019-04-09T01:26:42Z

20 votes

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

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

得到你想要的地方。

import toolz

def f(x):

return x+1

toolz.valmap(f, my_list)

Jesse Smith answered 2019-04-09T01:27:27Z

18 votes

您可以就地执行此操作,而不是创建新的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}

gens answered 2019-04-09T01:28:09Z

4 votes

虽然我的原始答案忽略了这一点(试图通过在defaultdict工厂中访问密钥的解决方案来解决这个问题),但我已经重新设计了它以提出对当前问题的实际解决方案。

这里是:

class walkableDict(dict):

def walk(self, callback):

try:

for key in self:

self[key] = callback(self[key])

except TypeError:

return False

return True

用法:

>>> d = walkableDict({ k1: v1, k2: v2 ... })

>>> d.walk(f)

我们的想法是将原始dict子类化,以赋予其所需的功能:在所有值上“映射”一个函数。

加分是这个字典可以用来存储原始数据,好像它是try,同时使用回调转换请求的任何数据。

当然,您可以随意按照您想要的方式命名类和函数(在此答案中选择的名称受PHP的try函数启发)。

注意:try-except块和return语句都不是必需的功能,它们可以进一步模仿PHP array_walk的行为。

7heo.tk answered 2019-04-09T01:29:12Z

2 votes

由于PEP-0469将iteritems()重命名为items()和PEP-3113,它们删除了Tuple参数解包,因此在Python 3.x中你应该编写Martijn Pieters♦这样的答案:

my_dictionary = dict(map(lambda item: (item[0], f(item[1]), my_dictionary.items()))

lucidyan answered 2019-04-09T01:29:40Z

0 votes

刚刚遇到这个用例。 我实现了基因回答,添加了一个递归方法来处理值也是如此:

def mutate_dict_in_place(f, d):

for k, v in d.iteritems():

if isinstance(v, dict):

mutate_dict_in_place(f, v)

else:

d[k] = f(v)

# Exemple handy usage

def utf8_everywhere(d):

mutate_dict_in_place((

lambda value:

value.decode('utf-8')

if isinstance(value, bytes)

else value

),

d

)

my_dict = {'a': b'byte1', 'b': {'c': b'byte2', 'd': b'byte3'}}

utf8_everywhere(my_dict)

print(my_dict)

在处理在Python 2中将字符串编码为字节的json或yaml文件时,这非常有用

Oyono answered 2019-04-09T01:30:15Z

在python中用字典来实现映射_映射python字典中的值相关推荐

  1. python中用def实现自动排序_用 python 实现各种排序算法

    常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元 ...

  2. python中用类名访问的方法_对于 Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问 答案:√...

    "华夏"之"华"为的是一()耳:生产也 < p >三.氧气在血中运之主文曰:< / p >也:心氧合血红蛋白 设启显辈可由启显组线性示, ...

  3. python和log有啥区别_细说 Python logging

    (可在我的博客文章) 最近有个需求是把以前字符串输出的log 改为json 格式,看了别人的例子,还是有些比较茫然,索性就把logging 整个翻了一边,做点小总结. 初看log 在程序中, log ...

  4. python 两个乘号是什么_(2)Python 变量和运算符

    一.python变量特点 python是弱类型语言,无需声明变量可以直接使用并且变量的数据类型可以动态改变 二.变量命名规则 1.不能使用python关键字 2.不能数字开头 3.不能包含空格 4.不 ...

  5. python字典类型可迭代_核心数据类型--字典

    ## 概括 字典是python中唯一的**映射类型**,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储 ...

  6. python字典常用的操作_说说Python字典以及基本操作?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  7. python 列表嵌套字典 添加修改删除_【Python】列表嵌套字典修改字典里面的一个值却把全部的值都修改了。...

    具体问题就是:当我往空列表里面添加字典,需要修改其中的一个键的值的时候,出现把其他同类的值也修改了. 下面就是出现问题的代码: aliens = [] new_alien = {"color ...

  8. python一张图学懂_【python系统学习07】一张图看懂字典并学会操作

    一张图get字典 一张图get字典的些许知识点 如果图中知识点描述过于概括,请看下列细文: 字典是什么 js的对象 说到字典,前端同学可以理解其为:对象.因为python中的字典和js中的对象长的不能 ...

  9. python用字典存储学生成绩_掌握Python字典的12个例子

    作者|Soner Yıldırım 编译|VK 来源|Towards Data Science 数据结构是任何编程语言的关键部分.为了创建健壮且性能良好的产品,必须非常了解数据结构. 在这篇文章中,我 ...

最新文章

  1. Android怎样保证一个线程最多仅仅能有一个Looper?
  2. Discuz!X论坛开发(九)二次开发之Discuz X2 文件目录功能详解
  3. php的ddd,在MVC框架中实现DDD – PHP
  4. Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
  5. [swift] LeetCode 169. Majority Element
  6. CCF201812-3 CIDR合并(100分)【位运算+文本】
  7. 静态代理,cglib动态代理,jdk动态代理区别以及流程详解
  8. Redis客户端工具安装
  9. BP神经网络原理分析及c++代码实现(上)
  10. VUE项目开发,使用开发者工具查看源文件
  11. java端口扫描器 demo_端口扫描器的设计与实现(java)
  12. 18.2 增强型图元文件
  13. 入驻三年,Airbnb在中国做了什么?
  14. Python在线办公系统毕业设计源码071116
  15. numpy中axis理解
  16. 录屏时如何录制麦克风声音?-QVE屏幕录制
  17. 【Excel】选择性粘贴
  18. 杭电ACM2085--核反应堆
  19. 2016年8月20日 星期六 --出埃及记 Exodus 16:21
  20. 卡巴斯基KAV KIS6.0激活码大全

热门文章

  1. PaaS概念遍地开花,Gartner教你分辨“泡沫”和“爆点”
  2. 基于itext7导出pdf实现,支持水印、中文等
  3. 在线学习的 40 个好地方(完整版)
  4. 1!+2!+3!+...+20!
  5. 使用Qt动画框架设计角色的二维动画
  6. php泥浆是什么,深厚砂性土层钻孔桩中PHP泥浆应用
  7. 现在是不是买房的时候[转]
  8. d2admin 登陆 笔记
  9. html. tabindex无效,什么是HTML tabindex属性?
  10. Spring框架(全)