Wayne, > def myfunc(cmpword, mainword): > for letter in cmpword: > if mainword.gets(letter): > if cmpword[letter] >mainword[letter]: > return False > else: > return False
I tried your function and couldn't get it to work. It threw an error in the line "if mainword.gets(letter):" saying that "gets" was not an attribute of dictionary. I tried it with "if mainword.get(letter):" -- no s but that would't work either. I've been playing with this most of the day and this is what i came up with: from operator import itemgetter class letters: def __init__(self): self.lettercount={} self.inlist=False self.inword=False self.mainword="" self.cmpword="" lc=letters() def countletters(word): lc.lettercount = {} for letter in word: lc.lettercount[letter] =lc.lettercount.get(letter,0) + 1 print sorted(lc.lettercount.iteritems(), key=itemgetter(1)) lc.mainword="batty" lc.cmpword="batyy" countletters(lc.mainword) mainword = lc.lettercount countletters(lc.cmpword) cmpword = lc.lettercount lst=[] for key in cmpword.keys(): for ky in mainword.keys(): if key<>ky: pass else: lst.append(key) for key in cmpword.keys(): if key not in lst: lc.inlist=False break else: lc.inlist=True # At this point the program stops if a letter is in cmpword that is not in mainword # What I try to do next is compare the values of the dictionary keys( this is where I'm getting confused) # get keys/values from cmpword # compare the values of the keys from mainword that match the keys from cmpword # if there is a key in mainword that is not in cmpword, ignore it # if a key is the same in both compare the values #if the value of a key that is in cmpword is greater the the value of the corresponding key in mainword then cmpword would not be in mainword ---------------------------------------------------------- cmpkeys=[] cmpvals=[] if lc.inlist==True: for key, val in cmpword.items(): cmpkeys.append(key) cmpvals.append(val) for a in range(len(cmpkeys)): for ky, vl in mainword.items(): if cmpkeys[a]==ky: #????? if cmpvals[a]>vl: #???? lc.inword=False else: lc.inword=True print cmpkeys[a], cmpvals[a] , ky, vl print if lc.inword==True: print lc.cmpword + " is IN: " + lc.mainword else: print lc.cmpword + " is Not in: " + lc.mainword Lol, it aint pretty, and it almost works. If you change the letters in lc.cmpword you'll see what I mean. There's got to be another way :) cheers, kreglet Wayne-68 wrote: > > > > That's correct - your function countletters returns None, so you're > assigning cmpword to None. And since None is not an iterable type, it > throws > an error. Try returning a value like I mentioned above and see how that > works. > > HTH, > Wayne > > -- View this message in context: http://www.nabble.com/Algorithm-tp25107922p25124979.html Sent from the Python - tutor mailing list archive at Nabble.com. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor