anagram finder / dict mapping question

dave squareswallower at 1ya2hoo3.net
Fri May 9 23:19:19 EDT 2008


On 2008-05-09 18:53:19 -0600, George Sakkis <george.sakkis at gmail.com> said:

> On May 9, 5:19 pm, umpsu... at gmail.com wrote:
>>>> What would be the best method to print the top results, the one's that
> 
>>>> had the highest amount of anagrams??  Create a new histogram dict?
>> 
>>> You can use the max() function to find the biggest list of anagrams:
>> 
>>> top_results = max(anagrams.itervalues(), key=len)
>> 
>>> --
>>> Arnaud
>> 
>> That is the biggest list of anagrams, what if I wanted the 3 biggest
>> lists?  Is there a way to specific top three w/ a max command??
> 
>>>> import heapq
>>>> help(heapq.nlargest)
> Help on function nlargest in module heapq:
> 
> nlargest(n, iterable, key=None)
>     Find the n largest elements in a dataset.
> 
>     Equivalent to:  sorted(iterable, key=key, reverse=True)[:n]
> 
> 
> HTH,
> George

I both the 'nlargest' and the 'sorted' methods.. I could only get the 
sorted to work.. however it would only return values like (3,  edam) 
not the list of words..

Here is what I have now.. Am I over-analyzing this?  It doesn't seem 
like it should be this hard to get the program to print the largest set 
of anagrams first...


def anafind():
	fin = open('text.txt')
	mapdic = {}
	finalres = []			# top answers go here
	for line in fin:
		line = line.strip()
		alphaword = ''.join(sorted(line))	#sorted word as key
		if alphaword not in mapdic:
			mapdic[alphaword] = [line]
		else:
			mapdic[alphaword].append(line)
	topans = sorted((len(mapdic[key]), key) for key in mapdic.keys())[-3:] 
  #top 3 answers
	for key, value in topans: 	#
		finalres.append(mapdic[value])
	print finalres




More information about the Python-list mailing list