我正在寫密碼,並且已將數字值分配給字母表中的每個字母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(下一個(字母的字母,值爲alphabet_dictionary.items(),如果value == number))'獲得生成器表達式的下一個(第一個)值,但是作爲[反向字典查找 - Python]的接受答案(http ://stackoverflow.com/questions/2568673/inverse-dictionary-lookup-python)指出:沒有繼承保證該值存在於字典中。 –
由於您只是簡單地將字母鏈接到數字,您可以使用'string.ascii_lowercase [index]'通過索引和'string.ascii_lowercase.index(char)'查找字母以獲取字符的索引。 –