如何在 Python 中避免 lambda
How to avoid lambda in Python
def parameterSchaetzung(kontextfreq,a,p,f1):
parameter = defaultdict(lambda: defaultdict(int))
for (s,w) in kontextfreq:
parameter[s][w] = (kontextfreq[(s,w)] + a[s] * p[w]) / (f1[s] + a[s])
#print((kontextfreq[(s,w)] + a[s] * p[w]) / (f1[s] + a[s]))
return parameter
当我尝试在 pickle 中写入函数的结果时出现错误。我认为,问题是因为 lambda。我该如何解决?
>>> parameter = defaultdict(lambda: defaultdict(int))
>>> pickle.dump(parameter,open("foo","wb"))
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
_pickle.PicklingError: Can't pickle <function <lambda> at 0x00000000032DA620>: attribute lookup <lambda> on __main__ failed
lambda
特性从您的程序中已知,您不能 pickle 函数。
您真正想要的是 pickle 数据,因此转储时只需转换为 dict
:
pickle.dump(dict(parameter),f)
并在加载时转换回来
parameter = defaultdict(lambda: defaultdict(int))
parameter.update(pickle.load(f))
def parameterSchaetzung(kontextfreq,a,p,f1):
parameter = defaultdict(lambda: defaultdict(int))
for (s,w) in kontextfreq:
parameter[s][w] = (kontextfreq[(s,w)] + a[s] * p[w]) / (f1[s] + a[s])
#print((kontextfreq[(s,w)] + a[s] * p[w]) / (f1[s] + a[s]))
return parameter
当我尝试在 pickle 中写入函数的结果时出现错误。我认为,问题是因为 lambda。我该如何解决?
>>> parameter = defaultdict(lambda: defaultdict(int))
>>> pickle.dump(parameter,open("foo","wb"))
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
_pickle.PicklingError: Can't pickle <function <lambda> at 0x00000000032DA620>: attribute lookup <lambda> on __main__ failed
lambda
特性从您的程序中已知,您不能 pickle 函数。
您真正想要的是 pickle 数据,因此转储时只需转换为 dict
:
pickle.dump(dict(parameter),f)
并在加载时转换回来
parameter = defaultdict(lambda: defaultdict(int))
parameter.update(pickle.load(f))