【问题标题】:How to iteratively replace list items with dictionary values in python?如何在python中用字典值迭代替换列表项?
【发布时间】:2015-12-07 22:50:54
【问题描述】:

我正在尝试创建一个编码/解码函数,该函数接受输入字符串并通过将字母与键匹配来将每个字母切换到字典键中的相应值。它基本上是一个 ROT-13 密码。

def Encode_Decode(A):
    A=list(A)
    for n in range(0,len(A),+1):
        if A[n]==Key.keys:
            map(Key.values(),A[n])


    print("This translates to: "+"".join(A))



Encode_Decode("Hello there")

我使用字典将字母表中的键值分配给 13 个字母以上的字母

Key=    {'a':'n','b':'o','c':'p','d':'q','e':'r','f':'s',
'g':'t','h':'u','i':'v',
'j':'w','k':'x','l':'y','m':'z','n':'a',
'o':'b','p':'c','q':'d','r':'e'
,'s':'f','t':'g','u':'h','v':'i','w':'j',
'x':'k','y':'l','z':'m','A':'N',
'B':'O','C':'P','D':'Q','E':'R','F':'S',
'G':'T','H':'U','I':'V','J':'W',
'K':'X','L':'Y','M':'Z','N':'A','O':'B',
'P':'C','Q':'D','R':'E','S':'F',
'T':'G','U':'H','V':'I','W':'J',
'X':'K','Y':'L','Z':'M'}

谁能告诉我为什么我的函数没有返回翻译后的句子?

【问题讨论】:

  • 正确使用for 循环,无需索引。顺便说一句,Key 和 Key.keys 是什么?
  • print A.translate(string.maketrans(*zip(*Key.items())))
  • @Joran Beasley 哇,太有效率了! *zip(*Key.items()) 是做什么的?str.maketrans 的文档会引导我(可能不正确)到 str.maketrans(Key)。
  • d.items() 将为您提供[(key,val),(key,val),...] 的列表...然后当您调用zip(*...) 时,将为您提供一对新的列表[(key,key,key),(val,val,val)] ...前面的星号将其解压缩到 string.maketrans 期望的 2 个参数中……除了我遗漏了一部分之外:(
  • 应该是string.maketrans(*map(''.join,zip(*Key.items())))

标签: python loops dictionary iteration


【解决方案1】:

这不是唯一的问题,但是……我想你想要:

if A[n] in Key:

而不是

if A[n]==Key.keys:

顺便说一句,Key 是一个令人困惑的 dict 名称。

我知道这只是一个评论,不是一个完整的答案,但我不知道如何格式化 cmets :)

【讨论】:

    【解决方案2】:

    如果所有个可能的字符都在Key中,你可以这样写:

    def Encode_Decode(A):
        A = map(Key.get, A)
        print("This translates to: "+"".join(A))
    

    但是,在您的测试字符串中,有一个空格,Key.get(' ') 返回None。如果序列中有None,"".join(A) 将失败

    您可以通过将默认参数传递给 Key.get 来解决此问题

    def Encode_Decode(A):
        A = (Key.get(x, x) for x in A)
        print("This translates to: "+"".join(A))
    

    Key.get(x, x) 表示如果x 不在字典中,只需使用x 代替,这样空格和其他字符将保持不变

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2020-09-18
      • 2019-02-23
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      相关资源
      最近更新 更多