【发布时间】:2020-05-07 11:55:54
【问题描述】:
:)
我想在我的代码中构建一个非常小的函数管道,以减少单个字典中的一堆函数。每个函数只做一件事,但在不同的键上,这里有一个简化的例子:
我有这本词典
d = {"me": "gab", "you": "cita"}
并假设一个像这样的愚蠢函数:
def make_caps(dic, on=None):
if on is not None:
to_cap = dic.get(on, None)
if to_cap is not None:
dic[on] = to_cap.upper()
return dic
我想让这个工作:
def reduce_fns_on_dict(fns, dic):
from functools import reduce
return reduce(lambda d, f: f(d), fns, dic)
new_dic = reduce_fns_on_dict(fns=[make_caps(on="me"), make_caps(on="you")],
dic=d)
print(new_dic)
在控制台上
{'me': 'GAB', 'you': 'CITA'}
但是当我运行上面我得到:
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: make_caps() missing 1 required positional argument: 'dic'
【问题讨论】:
-
使用字典理解来执行这种事情不是更具可读性吗?示例:
new_dic = {k:v.upper() for k,v in d.items() if k in ["me","you"]} -
是的,我就是这样 - 我也试过了,我很快就会在这里发布。
标签: python dictionary lambda functional-programming reduce