एक for loop के भीतर एक .txt फ़ाइल से शब्द गणना के साथ एक शब्दकोश बनाने की कोशिश कर रहा है

def countWords(filename):
    wordlist = {} 
    infile = open(filename)

    for line in infile:
        for word in line.split():
            if str(word) in wordlist == True :
                wordlist[word] += 1
                print("old found word")
            else:
                wordlist[word] = 1 
                print(" NOT found old word")
    return wordlist  

मैं उम्मीद करता हूं कि यह फ़ंक्शन टेक्स्ट फ़ाइल में उनकी गिनती के साथ सूचीबद्ध शब्दों के साथ शब्द सूची आउटपुट बनाएगा। इसके बजाय लूप लगातार "पुराना शब्द नहीं मिला" प्रिंट करता है और वर्डलिस्ट डिक्शनरी को सभी शब्दों को सूचीबद्ध करता है लेकिन उनकी गणना सभी = 1 होती है।

0
James Hulse 10 नवम्बर 2019, 18:45

3 जवाब

सबसे बढ़िया उत्तर

रेखा

if str(word) in wordlist == True :

निम्नानुसार मूल्यांकन किया जाता है:

सबसे पहले, अभिकथन wordlist == True का मूल्यांकन किया जाता है और False लौटाता है। यह अभिव्यक्ति की ओर जाता है if str(word) in False : जो False भी है।

इसलिए, else: स्टेटमेंट ट्रिगर होता है।

इसे ठीक करने के लिए, आप == True को छोड़ सकते हैं:

if str(word) in wordlist:

या कोष्ठक का प्रयोग करें:

if (str(word) in wordlist) == True :

हालांकि बाद वाला थोड़ा समझ में आता है।

1
warped 10 नवम्बर 2019, 18:57

आपके वांछित परिणाम के आधार पर, मैं शब्दकोश में कुंजी की जाँच को बदल दूंगा

if str(word) in wordlist:

आपको नीचे समारोह दे रहा है।

def countWords(filename):
    wordlist = {}
    infile = open(filename)

    for line in infile:
        for word in line.split():
            if str(word) in wordlist:
                wordlist[word] += 1
                print("old found word")
            else:
                wordlist[word] = 1
                print(" NOT found old word")
    return wordlist
0
Spinor8 10 नवम्बर 2019, 18:59

सबसे पहले, आपको str(word) in wordlist == True लिखने की ज़रूरत नहीं है, str(word) in wordlist पर्याप्त होगा।

दूसरा, शब्द को फ़ाइल से str वर्ग में बदलने की कोई आवश्यकता नहीं है।

तीसरा, कुछ मेमोरी लीक को रोकने के लिए, फ़ाइल खोलते समय with ऑपरेटर का उपयोग करना अच्छा अभ्यास है, इसलिए यह होगा

with open(filename) as infile:
    #your_code

चौथा, यदि print पंक्तियाँ आवश्यक नहीं हैं, तो pythonic कुछ इस तरह लिखना अधिक होगा:

from collections import Counter

text = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit, 
    sed diam nonummy nibh euismod tincidunt ut laoreet dolore 
    magna aliquam erat volutpat"""
wordline = dict(Counter(text.split())

अपने कार्य के साथ शुभकामनाएँ!

2
music_junkie 11 नवम्बर 2019, 10:25