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