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相匹配