【发布时间】:2020-04-03 12:03:48
【问题描述】:
这可能是一个微不足道的问题,但我有一本字典,我想在字典上应用大约 10 个函数来修改其内容。
我认为这对reduce 来说是一个很好的案例,但我似乎无法让它发挥作用。
这是一个例子
from datetime import datetime
import re
from functools import reduce
d_ = {
"dob_partial": "20120314",
"service_address_country":"Uni44ed Kind-om"
}
我想要的结果:
d_ = {
"dob_partial": "20120314",
"dob": datetime.datetime(2012, 3, 14, 0, 0)
"service_address_country":"Uni44ed Kind-om"
"service_address_country_clean":"Unied Kindom"
}
这是可复制的代码:
# pre-processing functions
def clean_address_country_code(d):
key = 'service_address_country'
d[key + 'clean'] = re.sub('[^a-zA-Z ]+', '', d[key])
return d
def add_datestr_to_date(d):
key = 'dob_partial'
d['dob'] = datetime.strptime(d.get(key), '%Y%m%d')
return d
# pipeline function to apply all preprocessing functions
def apply_all_preprocessing(fns, dic):
reduce(lambda fn, d=dic: fn(dic), fns)
return dic
fns = [add_datestr_to_date, clean_address_country_code]
apply_all_preprocessing(fns, d_)
仅部分起作用(它仅应用列表中的第一个函数fns):
>>> print(apply_all_preprocessing(fns, d_))
{'dob_partial': '20120314', 'service_address_country': 'Uni44ed K-?indom', 'dob': datetime.datetime(2012, 3, 14, 0, 0)}
【问题讨论】:
-
您是否在代码中的某处创建了一个名为 map 的变量?也许尝试打印地图的类型及其值
-
谢谢克里斯,我现在就试试。
-
以防万一你错过了:map 返回一个列表/可迭代。 reduce 期待一个可调用的。错误是什么让你感到惊讶?根据您的调试环境,只需输出 map() 以便您查看它在做什么。
标签: python dictionary functional-programming reduce functools