在python中用字典来实现映射_映射python字典中的值
映射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字典中的值相关推荐
- python中用def实现自动排序_用 python 实现各种排序算法
常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元 ...
- python中用类名访问的方法_对于 Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问 答案:√...
"华夏"之"华"为的是一()耳:生产也 < p >三.氧气在血中运之主文曰:< / p >也:心氧合血红蛋白 设启显辈可由启显组线性示, ...
- python和log有啥区别_细说 Python logging
(可在我的博客文章) 最近有个需求是把以前字符串输出的log 改为json 格式,看了别人的例子,还是有些比较茫然,索性就把logging 整个翻了一边,做点小总结. 初看log 在程序中, log ...
- python 两个乘号是什么_(2)Python 变量和运算符
一.python变量特点 python是弱类型语言,无需声明变量可以直接使用并且变量的数据类型可以动态改变 二.变量命名规则 1.不能使用python关键字 2.不能数字开头 3.不能包含空格 4.不 ...
- python字典类型可迭代_核心数据类型--字典
## 概括 字典是python中唯一的**映射类型**,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储 ...
- python字典常用的操作_说说Python字典以及基本操作?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...
- python 列表嵌套字典 添加修改删除_【Python】列表嵌套字典修改字典里面的一个值却把全部的值都修改了。...
具体问题就是:当我往空列表里面添加字典,需要修改其中的一个键的值的时候,出现把其他同类的值也修改了. 下面就是出现问题的代码: aliens = [] new_alien = {"color ...
- python一张图学懂_【python系统学习07】一张图看懂字典并学会操作
一张图get字典 一张图get字典的些许知识点 如果图中知识点描述过于概括,请看下列细文: 字典是什么 js的对象 说到字典,前端同学可以理解其为:对象.因为python中的字典和js中的对象长的不能 ...
- python用字典存储学生成绩_掌握Python字典的12个例子
作者|Soner Yıldırım 编译|VK 来源|Towards Data Science 数据结构是任何编程语言的关键部分.为了创建健壮且性能良好的产品,必须非常了解数据结构. 在这篇文章中,我 ...
最新文章
- Android怎样保证一个线程最多仅仅能有一个Looper?
- Discuz!X论坛开发(九)二次开发之Discuz X2 文件目录功能详解
- php的ddd,在MVC框架中实现DDD – PHP
- Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
- [swift] LeetCode 169. Majority Element
- CCF201812-3 CIDR合并(100分)【位运算+文本】
- 静态代理,cglib动态代理,jdk动态代理区别以及流程详解
- Redis客户端工具安装
- BP神经网络原理分析及c++代码实现(上)
- VUE项目开发,使用开发者工具查看源文件
- java端口扫描器 demo_端口扫描器的设计与实现(java)
- 18.2 增强型图元文件
- 入驻三年,Airbnb在中国做了什么?
- Python在线办公系统毕业设计源码071116
- numpy中axis理解
- 录屏时如何录制麦克风声音?-QVE屏幕录制
- 【Excel】选择性粘贴
- 杭电ACM2085--核反应堆
- 2016年8月20日 星期六 --出埃及记 Exodus 16:21
- 卡巴斯基KAV KIS6.0激活码大全
热门文章
- PaaS概念遍地开花,Gartner教你分辨“泡沫”和“爆点”
- 基于itext7导出pdf实现,支持水印、中文等
- 在线学习的 40 个好地方(完整版)
- 1!+2!+3!+...+20!
- 使用Qt动画框架设计角色的二维动画
- php泥浆是什么,深厚砂性土层钻孔桩中PHP泥浆应用
- 现在是不是买房的时候[转]
- d2admin 登陆 笔记
- html. tabindex无效,什么是HTML tabindex属性?
- Spring框架(全)