How do you make a dictionary inverse and then use that to swap letters in a string in Python
本问题已经有最佳答案,请猛点这里访问。
快速解释我想做什么。我一直在想如何反字典,因为我试图做一个单字母密码,这将有助于我很快的挑战。我在学习了如何反字典之后的目标是能够用它来交换字符串中的字母。
这是我现在拥有的东西,一点也不多,但如果有人能帮助我,那就太棒了,因为我已经试了很长时间了,但我不知道该怎么做。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | dicta = { 'a': 'M', 'b': 'N', 'c': 'B', 'd': 'V', 'e': 'C', 'f': 'X', 'g': 'Z', 'h': 'A', 'i': 'S', 'j': 'D', 'k': 'F', 'l': 'G', 'm': 'H', 'n': 'J', 'o': 'K', 'p': 'L', 'q': 'P', 'r': 'O', 's': 'I', 't': 'U', 'u': 'Y', 'v': 'T', 'w': 'R', 'x': 'E', 'y': 'W', 'z': 'Q', ' ': ' ', } print(dicta) |
其他人给了你反转。替换很容易理解列表:
1 2 3 4 5 6 7 8 9 10 | dicta = { # as above } dictb = {v: k for k, v in dicta.items()} orig_str = # your original text # Make a list of translated characters: # if the char is in the dictionary, use the translation; # otherwise, use the original. new_char_list = [dicta[char] if char in dicta else char \ for char in orig_str] # Join the translated list into a string. new_str = ''.join(new_char_list) |
如果你愿意的话,你可以把最后两个作业结合起来,但我认为作为单独的陈述更容易理解。
编辑每个操作的注释
没问题,这就是我们学习的方式。将列表理解从内到外展开,代码看起来像这样:
1 2 3 4 5 6 7 8 9 10 | new_char_list = [] for char in old_string: if char in dicta: # is this character in the dictionary? new_char = dicta[char] else: new_char = char new_char_list += [char] The **if** statement lets you handle characters that you didn't put into the dictionary: punctuation, for example. |
这能帮你消除困惑吗?