gargonx wrote:
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

Reply via email to