/ / Beizen eines Wörterbuchs, das defaultdict verwendet - Python, Wörterbuch, Pickle

Picking eines Wörterbuchs, das defaultdict verwendet - Python, Dictionary, Pickle

Ich habe dieses Wörterbuch definiert durch:

def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model

Später möchte ich Pickle verwenden und das Wörterbuch in eine Textdatei kopieren:

f = open("dict.txt", "wb")
pickle.dump(Nwords, f)

Der Code funktioniert jedoch nicht und ich erhalte eine Fehlermeldung. Anscheinend pickle kann nicht funktionieren lambda und ich bin besser dran, das zu definieren model mit einer Funktion auf Modulebene. Ich habe die Antworten bereits gelesen Hier

Da ich mit Python nicht vertraut bin, weiß ich leider nicht genau, wie ich das machen soll. Ich habe es versucht:

def dd():
return defaultdict(int)

def train(features):
##    model = defaultdict(lambda: 1)
model = defaultdict(dd)
for f in features:
model[f] += 1
return model

Ich erhalte den Fehler:

TypeError: unsupported operand type(s) for +=: "collections.defaultdict" and "int"

Abgesehen davon, return defaultdict(int) würde dem ersten Vorkommen eines Schlüssels immer eine Null zuweisen, wohingegen ich möchte, dass er 1 zugewiesen wird

Antworten:

2 für die Antwort № 1

Leider ist diese Antwort dort richtigdiese Frage, aber subtil falsch für Sie. Eine Top-Level-Funktion anstelle eines Lambda ist zwar großartig und würde Pickle tatsächlich viel glücklicher machen, die Funktion sollte jedoch den zu verwendenden Standardwert zurückgeben, der für Ihren Fall gilt nicht Ein weiterer defaultdict Objekt.

Gib einfach den gleichen Wert zurück lambda kehrt zurück:

def dd():
return 1

Jedes Mal, wenn Sie versuchen, auf einen Schlüssel im zuzugreifen defaultdict Instanz, die noch nicht existiert, dd wird genannt. Der andere Beitrag kehrt dann zurück Ein weiterer defaultdict Zum Beispiel dieses Set zur Verwendung int als Standardwert, der mit dem in der anderen Frage angezeigten Lambda übereinstimmt.