keys = []
def lzw(text):
tokens = text.split()
new_keys = dict.fromkeys(tokens).keys()
keys.extend([key for key in new_keys if key not in keys])
encoded = ["%s"%keys.index(tok) for tok in tokens]
for i,key in enumerate(keys):
try:
encoded[encoded.index(str(i))] = key
except:
pass
return " ".join(encoded)
print lzw("abcd abcd fasf asda abcd fasf")
#outputs: abcd 0 fasf asda 0 2
is a pretty easy implementation