Python 清理使用defaultdict的词典
我将此词典定义为:Python 清理使用defaultdict的词典,python,dictionary,pickle,Python,Dictionary,Pickle,我将此词典定义为: def train(features): model = collections.defaultdict(lambda: 1) for f in features: model[f] += 1 return model 接下来,我想使用pickle并将字典转储到文本文件中: f = open('dict.txt', 'wb') pickle.dump(Nwords, f) 但是代码不起作用,我收到一个错误。显然,pickle无法使用
def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model
接下来,我想使用pickle并将字典转储到文本文件中:
f = open('dict.txt', 'wb')
pickle.dump(Nwords, f)
但是代码不起作用,我收到一个错误。显然,pickle
无法使用lambda
,我最好使用模块级函数定义模型。我已经看过答案了
不幸的是,由于我没有使用Python的经验,我不太确定如何做到这一点。我试过:
def dd():
return defaultdict(int)
def train(features):
## model = defaultdict(lambda: 1)
model = defaultdict(dd)
for f in features:
model[f] += 1
return model
我收到错误消息:
TypeError: unsupported operand type(s) for +=: 'collections.defaultdict' and 'int'
除此之外,returndefaultdict(int)
将始终为键的第一次出现分配一个零,而我希望它分配1。关于如何解决这个问题有什么想法吗?不幸的是,这个答案对这个问题是正确的,但对你的答案却有细微的错误。虽然用顶级函数代替lambda很好,而且确实会使pickle更愉快,但该函数应该返回要使用的默认值,对于您的情况,它不是另一个defaultdict
对象
只需返回与lambda
返回的值相同的值:
def dd():
return 1
每次尝试访问defaultdict
实例中尚不存在的密钥时,都会调用dd
。然后,另一篇文章返回另一个defaultdict
实例,该实例集使用int
作为默认值,它与另一个问题中显示的lambda相匹配