我是一个列出理解力的初学者,我很难搞清楚。根据我在stackoverflow和其他网站上看到的例子,我有一个列表理解似乎它应该工作,但我还没有能够完成所需的输出,因为我一直无法找出正确的语法我想完成。
给定一个字符串,我希望我的函数返回字符串,其中字母字符替换为与提供的字典中的键相关联的值。对于那个任务我的列表理解有效,但我还需要任何字符和空格保持完整(没有变化)。
以下是我的尝试:
#random dictionary for my example
d = {'a': 'b', 'c': 'i', 'b': 'a', 'e': 'j', 'd': 'm', 'g': 'q','f': 'l',
'i': 'c', 'h': 'w', 'k': 'r', 'j': 'e', 'm': 'd','l': 'f', 'o': 'v',
'n': 's', 'q': 'g', 'p': 't', 's': 'n','r': 'k', 'u': 'x', 't': 'p',
'w': 'h', 'v': 'o', 'y': 'z', 'x': 'u', 'z': 'y'}
def cipher(message):
word = list(message)
word = [v for x in word for k,v in d.iteritems() if x == k]
#word = [v for x in word for k,v in d.iteritems() if x == k else x for x in word]
return "".join(word)
print cipher("that tree is far away!")
这会返回我的字符串,其字母字符已正确更改,但没有空格且没有!标记。从进一步的研究中,我引导我尝试在我的代码示例中注释掉的列表理解中的else语句,但这并不起作用。
我可以编辑我的语法,还是无法使用列表推导完成我想要做的事情?
进一步澄清:
我收到此输出:pwbppkjjcnlbkbhbz
我想要这个输出:pwbp pkjj cn lbk bhbz!