Performance issue
Steven Bethard
steven.bethard at gmail.com
Sat Apr 2 17:02:28 EST 2005
Marc 'BlackJack' Rintsch wrote:
> def make_anagram_map(words):
> anagram_map = dict()
> for word in imap(lambda w: w.strip().lower(), words):
> sorted_word = ''.join(sorted(list(word)))
> anagram_map.setdefault(sorted_word, list()).append(word)
>
> return dict(ifilter(lambda x: len(x[1]) > 1, anagram_map.iteritems()))
Or if you're afraid of map and filter like me, you can try:
def make_anagram_map(words):
anagram_map = {}
for word in (w.strip().lower() for w in words):
anagram_map.setdefault(''.join(sorted(word)), []).append(word)
return dict(sortedword_wordlist
for sortedword_wordlist in anagram_map.iteritems()
if len(sortedword_wordlist[1]) > 1)
py> make_anagram_map(['owers', 'pest', 'rowse', 'pets', 'sower', 'step'])
{'epst': ['pest', 'pets', 'step'], 'eorsw': ['owers', 'rowse', 'sower']}
STeVe
More information about the Python-list
mailing list