开发者

Python: 'Nontype' object has no attribute keys

开发者 https://www.devze.com 2023-01-16 07:19 出处:网络
def index_dir(self, base_path): num_files_indexed = 0 allfiles = os.listdir(base_path) #print allfiles num_files_indexed = len(allfiles)
   def index_dir(self, base_path): 

        num_files_indexed = 0
        allfiles = os.listdir(base_path)
        #print allfiles
        num_files_indexed = len(allfiles)
        #print num_files_indexed
        docnumber = 0
        self._inverted_index = {} #dictionary
        for file in allfiles: 
                self.documents = [base_path+file] #list of all text files
                f = open(base_path+file, 'r')
                lines = f.read()
  # Tokenize the file into words
                tokens = self.tokenize(lines)
                docnumber = docnumber + 1
                print 'docnumber', docnumber
                for term in tokens:  
# check if the key already exists in the dictionary, if yes, 
# just add a new value for the key
                    #if self._inverted_index.has_key(term)
                    if term in sorted(self._inverted_index.keys()):
                        docnumlist = self._inverted_index.get(term)
                        docnumlist = docnumlist.append(docnumber)
                    else:
# if the key doesn't exist in dictionary, add the key (term) 
# and associate the docnumber value with it. 
                        self._inverted_index = self._inverted_index.update({term: docnumber})
   #self._inverted_index[term] = docnumber 
                f.close()
        print 'dictionary', self._inverted_index 
        print 'keys', self._inverted_index.keys()
        return num_files_indexed

I'm working on an information retrieva开发者_JAVA技巧l project where we are supposed to crawl through multiple text file, tokenize the files and store the words in an inverted list (dictionary) data structure.

ex: doc1.txt: "the dog ran" doc2.txt: "the cat slept"

_inverted_index = { 'the': [0,1], 'dog': [0], 'ran': [0], 'cat': [1], 'slept': [1] } where 0,1 are docIDs

I'm getting the following error: 'Nontype' object has no attribute keys. line#95

All help is highly appreciated.


When self._inverted_index is a dictionary, self._inverted_index.update will update it in-place and return None (like most mutators do). So, the disastrous bug in your code is the line:

 self._inverted_index = self._inverted_index.update({term: docnumber})

which sets self._inverted_index to None. Just change it to

 self._inverted_index.update({term: docnumber})

simply accepting the in-place update (mutation) and without the erroneous assignment!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号