Как сделать несколько замен одновременно? | PYTHON - PullRequest
1 голос
/ 17 апреля 2020

У меня есть следующая строка:

stringone = '0123456789 abcdefghijklmnopqrstuvwxys ABCDEFGHIJKLMNOPQRSTUVWXYS'

И мне нужно сделать следующие замены:

0 = s
1 = 6
2 = r
...
Z = F

Но мне нужно сделать их один раз. Я имею в виду, не

stringone.replace('0', 's')
stringone.replace('1', '6')

... не так, но в одной строке. Могу ли я сделать это, например, как

stringone.replace('0', 's'; '1', '6')

Я не знаю, как это сделать. Вы можете помочь мне? Python 3.6.0

Ответы [ 4 ]

1 голос
/ 17 апреля 2020
>>> stringone.translate({ord('0'): 's', ord('1'): '6'})
's623456789 abcdefghijklmnopqrstuvwxys ABCDEFGHIJKLMNOPQRSTUVWXYS'
1 голос
/ 17 апреля 2020

Давайте сделаем это с помощью словаря:

dic = {'0':'s', '1':'6', '2':'r'....}

# either join
''.join(i if i not in dic else dic[i] for i in stringone)

# or re
import re
re.compile("|".join(dic.keys())).sub(lambda m: dic[re.escape(m.group(0))], stringone)

Объединить проще, поскольку мы заменяем ключ значениями.

0 голосов
/ 17 апреля 2020

Создать список кортежей со значениями для замены:

elements = [('0', 's'), ('1', '6'), ..., ('Z', 'F')]

А затем l oop над этим списком:

for to_replace, replacement in elements:
    my_string = my_string.replace(to_replace, replacement)
0 голосов
/ 17 апреля 2020

Попробуйте это ниже:

import re

def multireplace(string, sub_dict):

    substrings = sorted(sub_dict, key=len, reverse=True)
    regex = re.compile('|'.join(map(re.escape, substrings)))
    return regex.sub(lambda match: sub_dict[match.group(0)], string)

stringone = '0123456789 abcdefghijklmnopqrstuvwxys ABCDEFGHIJKLMNOPQRSTUVWXYS'

sub_dict = {"0": "s", "1": "6", "2":"r","Z":"F"}
output = multireplace(stringone, sub_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...