fork download
  1. from collections import defaultdict
  2. from itertools import combinations
  3. from pprint import pprint
  4.  
  5. allwords = 'deer do doff door fodder food for odd red redder rod rood roof'.split()
  6. pprint(allwords)
  7.  
  8. # If you care only about all the letters in each word...
  9. words4letters = defaultdict(list)
  10. for word in allwords:
  11. letters = tuple(sorted(set(word)))
  12. words4letters[''.join(letters)].append(word)
  13. pprint(dict(words4letters))
  14.  
  15. # If you care about every letter combination in each word...
  16. words4letters = defaultdict(list)
  17. for word in allwords:
  18. letters = sorted(set(word))
  19. for i in range(1, len(letters)+1):
  20. for combo in combinations(letters, i):
  21. words4letters[''.join(combo)].append(word)
  22. pprint(dict(words4letters))
  23.  
Success #stdin #stdout 0.03s 5808KB
stdin
Standard input is empty
stdout
['deer',
 'do',
 'doff',
 'door',
 'fodder',
 'food',
 'for',
 'odd',
 'red',
 'redder',
 'rod',
 'rood',
 'roof']
{'defor': ['fodder'],
 'der': ['deer', 'red', 'redder'],
 'dfo': ['doff', 'food'],
 'do': ['do', 'odd'],
 'dor': ['door', 'rod', 'rood'],
 'for': ['for', 'roof']}
{'d': ['deer',
       'do',
       'doff',
       'door',
       'fodder',
       'food',
       'odd',
       'red',
       'redder',
       'rod',
       'rood'],
 'de': ['deer', 'fodder', 'red', 'redder'],
 'def': ['fodder'],
 'defo': ['fodder'],
 'defor': ['fodder'],
 'defr': ['fodder'],
 'deo': ['fodder'],
 'deor': ['fodder'],
 'der': ['deer', 'fodder', 'red', 'redder'],
 'df': ['doff', 'fodder', 'food'],
 'dfo': ['doff', 'fodder', 'food'],
 'dfor': ['fodder'],
 'dfr': ['fodder'],
 'do': ['do', 'doff', 'door', 'fodder', 'food', 'odd', 'rod', 'rood'],
 'dor': ['door', 'fodder', 'rod', 'rood'],
 'dr': ['deer', 'door', 'fodder', 'red', 'redder', 'rod', 'rood'],
 'e': ['deer', 'fodder', 'red', 'redder'],
 'ef': ['fodder'],
 'efo': ['fodder'],
 'efor': ['fodder'],
 'efr': ['fodder'],
 'eo': ['fodder'],
 'eor': ['fodder'],
 'er': ['deer', 'fodder', 'red', 'redder'],
 'f': ['doff', 'fodder', 'food', 'for', 'roof'],
 'fo': ['doff', 'fodder', 'food', 'for', 'roof'],
 'for': ['fodder', 'for', 'roof'],
 'fr': ['fodder', 'for', 'roof'],
 'o': ['do',
       'doff',
       'door',
       'fodder',
       'food',
       'for',
       'odd',
       'rod',
       'rood',
       'roof'],
 'or': ['door', 'fodder', 'for', 'rod', 'rood', 'roof'],
 'r': ['deer',
       'door',
       'fodder',
       'for',
       'red',
       'redder',
       'rod',
       'rood',
       'roof']}