I'm having great fun playing with Markov chains. I am making a dictionary of all the words in a given string, getting a count of how many appearances word1 makes in the string, getting a list of all the word2s that follow each appearance of word1 and a count of how many times word2 appears in the string as well. (I know I should probably be only counting how many times word2 actually follows word1, but as I said, I'm having great fun playing ...)
printed output of the dictionary looks like so: {'and': [1, {'to': 1}], 'down': [1, {'upon': 1}], 'them': [1, {'down': 1}], 'no': [1, {'others': 1}], 'this': [1, {'it': 1}], 'is': [2, {'a': 2}], 'upon': [1, {'a': 1}], 'it': [2, {'is': 2}], 'think': [2, {'and': 1, 'words': 1}], 'write': [1, {'this': 1}], 'to': [3, {'write': 1, 'put': 1, 'think': 1}], 'words': [1, {'no': 1}], 'others': [1, {'think': 1}], 'put': [1, {'them': 1}], 'sin': [2, {'to': 2}]} Here's the actual function. def assembleVocab(self): self.wordDB = {} for word in self.words: try: if not word in self.wordDB.keys(): wordsWeights = {} afterwords = [self.words[i + 1] for i, e in enumerate(self.words) if e == word] for aw in afterwords: if not aw in wordsWeights.keys(): wordsWeights[aw] = afterwords.count(aw) self.wordDB[word] = [self.words.count(word), wordsWeights] except: pass out = open("mchain.pkl",'wb') pickle.dump(self.wordDB, out, -1) out.close() My problem is, I can't seem to get it to unpickle. When I attempt to load the saved data, I get: AttributeError: 'tuple' object has no attribute 'readline' with pickle, and TypeError: argument must have 'read' and 'readline' attributes Looking at the pickle pages on docs.python.org, I see that I am indeed supposed to be able to pickle ``tuples, lists, sets, and dictionaries containing only picklable objects''. I'm sure I'm missing something obvious. Clues? -- http://mail.python.org/mailman/listinfo/python-list