Я пишу шифр, и я присвоил числовые значения каждой букве в алфавите, alphabet_dictionary = {'a': 0, 'b': 1, 'c': 2,... etc.}
.Как найти ключ, используя значение в словаре python 3?
Я сначала конвертирую письмо в message
в номера, выполняю некоторую арифметику и сохраняю эти числа в переменной с именем code
.
Я хочу преобразовать их обратно в письма.
До сих пор у меня есть:
for number in code:
for letter, value in alphabet_dictionary.items():
if value == number:
coded_message.append(letter)
Это работает. В итоге я получил правильное кодированное сообщение внутри моего списка coded_message
. Есть ли что-то лучшее или более эффективное?
Почему я не могу сделать это в одной строке? Я первый попытался с помощью:
for number in code:
coded_message.append(letter for letter, value in alphabet_dictionary.items() if value == number)
но добавляет только адреса выделения памяти для отдельных символов, например:
`[<generator object <genexpr> at 0x1011bb240>, <generator object <genexpr> at 0x1011bb1f8>, <generator object <genexpr> at 0x1011bb288>, <generator object <genexpr> at 0x1011bb2d0>, <generator object <genexpr> at 0x1011bb318>, <generator object <genexpr> at 0x1011bb360>, <generator object <genexpr> at 0x1011bb3a8>]'
Почему это происходит?
Возможный дубликат [обратного поиска словаря - Python] (http://stackoverflow.com/questions/25 68673/inverse-dictionary-lookup-python) –
, если вы абсолютно уверены, что будет только одно совпадение с значением, которое вы можете использовать 'coded_message.append (next (letter for letter, value in alphabet_dictionary.items(), если значение == number)) ', чтобы получить следующее (первое) значение выражения генератора, но в качестве принятого ответа [Обратный поиск слова - Python] (http : //stackoverflow.com/questions/2568673/inverse-dictionary-lookup-python) указывает: нет гарантии наследования, что значение присутствует в словаре. –
Поскольку вы просто связываете буквы с числами, вы можете просто использовать 'string.ascii_lowercase [index]' для поиска буквы по индексу и 'string.ascii_lowercase.index (char)' для получения индекса символа. –