user1040563
user1040563

Reputation: 5261

How do I replace characters in a string in Python?

I'm trying to find the best way to do the following:

I have a string lets say:

str = "pkm adp"

and I have a certain code in a dictionary to replace each charecter such as this one:

code =  {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}

('a' should be replaced by 'c', 'd' by 'a' ...)

How can I convert the first string using the required characters from the dictionary to get the new string? Here for example I should get "red car" as the new string.

Upvotes: 2

Views: 3510

Answers (6)

garnertb
garnertb

Reputation: 9584

>>>print ''.join([code.get(s,s) for s in str])
'red car'

Upvotes: 0

Duncan
Duncan

Reputation: 95612

Assuming you are using Python 2.x:

>>> from string import translate, maketrans
>>> data = "pkm adp"
>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> table = maketrans(''.join(code.keys()), ''.join(code.values()))
>>> translate(data, table)
'red car'

Upvotes: 0

Tim Pietzcker
Tim Pietzcker

Reputation: 336088

"".join(code.get(k, k) for k in str)

would also work in your case.

code.get(k, k) returns code[k] if k is a valid key in code; if it isn't, it returns k itself.

Upvotes: 6

Zain Khan
Zain Khan

Reputation: 3793

though it would be tedious but a quick fix is str.replace("old", "new"). Here is the documentation for your help too http://www.tutorialspoint.com/python/string_replace.htm

Upvotes: 0

Claudiu
Claudiu

Reputation: 229291

Try this:

>>> import string
>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> trans = string.maketrans(*["".join(x) for x in zip(*code.items())])
>>> str = "pkm adp"
>>> str.translate(trans)
'red car'

Explanation:

>>> help(str.translate)
Help on built-in function translate:

translate(...)
    S.translate(table [,deletechars]) -> string

    Return a copy of the string S, where all characters occurring
    in the optional argument deletechars are removed, and the
    remaining characters have been mapped through the given
    translation table, which must be a string of length 256.

>>> help(string.maketrans)
Help on built-in function maketrans in module strop:

maketrans(...)
    maketrans(frm, to) -> string

    Return a translation table (a string of 256 bytes long)
    suitable for use in string.translate.  The strings frm and to
    must be of the same length.

The maketrans line turns the dictionary into two separate strings suitable for input into maketrans:

>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> code.items()
[('a', 'c'), ('p', 'r'), ('k', 'e'), ('m', 'd'), ('d', 'a')]
>>> zip(*code.items())
[('a', 'p', 'k', 'm', 'd'), ('c', 'r', 'e', 'd', 'a')]
>>> ["".join(x) for x in zip(*code.items())]
['apkmd', 'creda']

Upvotes: 8

setrofim
setrofim

Reputation: 725

>>> s = "pkm adp"
>>> code = {'a': 'c', 'd': 'a', 'p': 'r', 'k': 'e', 'm': 'd'}
>>> from string import maketrans
>>> s.translate(maketrans(''.join(code.keys()), ''.join(code.values())))
'red car'

Upvotes: 6

Related Questions