Замена элементов в списке на основе их соответствия в словаре - PullRequest
0 голосов
/ 17 июня 2020

Хорошо, по сути, я пытаюсь написать функцию, которая принимает строку и словарь, связывающий каждую букву в алфавите с другой буквой в алфавите. Затем функция разбивает строку на отдельные буквы, меняет их местами на их пару в словаре, а затем объединяет все вместе. Важно отметить, что в моем словаре входной алфавит - это значения в паре (ключ, значение), и я пытаюсь переключиться на ключевой алфавит.

def substitutor(text,theDict):
    for n in list(text):
        n = [key  for (key, value) in theDict.items() if value == n]

Я здесь пробовал взять каждую букву n в списке букв «список (текст)» и переопределить ее как ключ в моей паре (ключ, значение) в словаре. Я знаю, что мне нужно что-то вернуть, но не могу понять, что именно. Вывод должен быть либо списком, эквивалентным списку (тексту), но с замененными буквами, либо, что еще лучше, отдельной строкой, объединяющей этот список в один. Я новичок в python, поэтому я могу упустить что-то очевидное здесь, хотел бы помочь.

Ответы [ 3 ]

1 голос
/ 17 июня 2020

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

def substitutor(text, theDict):
    rev_dict = {v: k for k, v in theDict.items()}
    return ''.join(rev_dict.get(c, '') for c in text)
0 голосов
/ 17 июня 2020

Ваш код неверен, во-первых, вы не должны определять индекс итерации (n здесь) с чем-то еще, ** что вы можете сделать, это получить каждый элемент строки и использовать его как ключ к словарю, чтобы получить его Зашифрованный символ !! **

Для примера я поставил вам однострочный код, он будет работать в соответствии с вашей проблемой !!

def substitutor(text,theDict):
    encrypted_text = ''.join([ theDict.get(n) for n in list(text) if theDict.haskey(n) ])
    return encrypted_text
0 голосов
/ 17 июня 2020

Использование str.translate ()

def substitutor(text,theDict):
    d = {ord(v): k for k, v in theDict.items()}
    return text.translate(d)
...