/ / एक शब्दकोश को चुनना जो डिफ़ॉल्ट डिक्टिक्स - पायथन, शब्दकोश, अचार का उपयोग करता है

डिफ़ॉल्ट शब्दकोश का उपयोग करने वाले शब्दकोश को चुनना - पायथन, शब्दकोश, अचार

मेरे पास इस शब्दकोश को परिभाषित किया गया है:

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 एक डिफ़ॉल्ट के रूप में, जो दूसरे प्रश्न में दिखाए गए लैम्ब्डा से मेल खाता है।