मेरे पास इस शब्दकोश को परिभाषित किया गया है:
def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model
बाद में, मैं अचार का उपयोग करना चाहता हूं और शब्दकोश को एक टेक्स्ट फ़ाइल में डंप करना चाहता हूं:
f = open("dict.txt", "wb")
pickle.dump(Nwords, f)
हालांकि कोड काम नहीं करता है और मुझे एक त्रुटि मिलती है। जाहिर है pickle
साथ काम नहीं कर सकता lambda
और मैं इसे परिभाषित करने से बेहतर हूं model
मॉड्यूल-स्तरीय फ़ंक्शन का उपयोग करना। मैंने पहले से ही जवाब पढ़े हैं यहाँ
दुर्भाग्य से मुझे पाइथन के साथ अनुभव नहीं हुआ है, मुझे बिल्कुल यकीन नहीं है कि यह कैसे करें। मैंने कोशिश की:
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"
उसके अलावा, return defaultdict(int)
हमेशा एक कुंजी की पहली घटना के लिए शून्य आवंटित करेगा, जबकि मैं इसे असाइन करना चाहता हूं 1. इस पर कोई विचार कैसे मैं इसे ठीक कर सकता हूं?
उत्तर:
जवाब के लिए 2 № 1दुर्भाग्यवश, उस उत्तर के लिए सही हैवह सवाल, लेकिन आपके लिए गलत रूप से गलत है। यद्यपि लैम्ब्डा के बजाए एक शीर्ष-स्तरीय फ़ंक्शन बहुत अच्छा है और वास्तव में अचार को बहुत खुश कर देगा, फ़ंक्शन को उपयोग करने के लिए डिफ़ॉल्ट मान वापस करना चाहिए, जो आपके मामले के लिए है नहीं एक और defaultdict
वस्तु।
बस वही मान वापस करें lambda
रिटर्न:
def dd():
return 1
हर बार जब आप एक कुंजी तक पहुंचने का प्रयास करते हैं defaultdict
उदाहरण जो अभी तक अस्तित्व में नहीं है, dd
कहा जाता है। दूसरी पोस्ट फिर वापस आती है एक और defaultdict
उदाहरण के लिए, एक का उपयोग करने के लिए सेट int
एक डिफ़ॉल्ट के रूप में, जो दूसरे प्रश्न में दिखाए गए लैम्ब्डा से मेल खाता है।