This works much better, aside from the fact that it does'nt work for the std dictionary. the letters used from here stay the same. that dictionary looks like this:
std = { "A":"Z", "Z":"A", "B":"Y", "Y":"B", "C":"X", "X":"C", "E":"V", "V":"E", "H":"S", "S":"H", "M":"N", "N":"M" }
what could be causing this?
i did figure out that if you reverse the k,v you are able to get it but that doesn't turn up the results i need
def proc(text): result = [] for word in text: for k, v in replacements: word = word.replace(v,k) #here i reversed them result.append(word) return ''.join(result)
The problem is that if you run all the replacements in std, you first translate As to Zs and then Zs to As. If you want to do each character only once, you should probably write this as:
py> std = { ... "A":"Z", ... "Z":"A", ... "B":"Y", ... "Y":"B", ... "C":"X", ... "X":"C", ... "E":"V", ... "V":"E", ... "H":"S", ... "S":"H", ... "M":"N", ... "N":"M"} py> ext = {"aa":"i"} py> punc = {",":"!"} py> replacements = {} py> replacements.update(punc) py> replacements.update(ext) py> replacements.update(std) py> def proc(text): ... result = [] ... for char in text: ... result.append(replacements.get(char, char)) ... return ''.join(result) ... py> proc('ABCDEFG') 'ZYXDVFG'
Or alternatively:
py> def proc(text): ... return ''.join([replacements.get(c, c) for c in text]) ... py> proc('ABCDEFG') 'ZYXDVFG'
Note however, that this won't work for multi-character strings like you had in 'ext' in your original example:
py> proc('ABCaaEFG') 'ZYXaaVFG'
But neither would your original code. Are the items in std always a single character? Does ext always translate two characters to one? Could you give us some more info on the task here?
Steve -- http://mail.python.org/mailman/listinfo/python-list