使用匹配键中的值更新字典中的字符串

时间:2016-04-01 04:55:49

标签: python string dictionary indexing

def endcode(msg,secret_d):
    for ch in msg:
        for key,value in secret_d:
             if ch == key:
                 msg[ch] = value
    return msg
encode('CAN YOU READ THIS',{'A':'4','E':'3','T':'7','I':'1','S':'5'}) 

这是我的代码。我在这里尝试做的是对于字符串msg中的每个字符,如果字符ch是字典中的键secret_d,该函数应该在字典中搜索并用映射字符串替换它。 1}}。

如果ch不是secret_d中的密钥,则保持不变。

对于示例,最终结果应为'C4N YOU R34D 7H15'

2 个答案:

答案 0 :(得分:0)

您的函数名称为endcode,但您正在调用encode

但更重要的是,我会告诉你一些事情的进展。这不会完全奏效,但它会让你回到正轨。

def endcode(msg,secret_d):
    newstr=""
    for ch in msg:
        for key,value in secret_d.iteritems():
            if ch == key:
                newstr=newstr+value
    print(msg)
endcode('CAN YOU READ THIS',{'A':'4','E':'3','T':'7','I':'1','S':'5'}) 

但如果你想要一个完整的答案,here就是我的。

答案 1 :(得分:0)

一些问题:

  • 正如rb612指出的那样,你的函数定义中有一个拼写错误(“en d 代码”)
  • 在调用函数后,您对函数的返回值无效。
  • msg[ch]正在尝试在字符串中分配项目,但这是不可能的,字符串是不可变的。你必须建立一个新的字符串。你不能“更新”它。
  • 为了迭代(key, value)对字典d,您必须遍历d.items()。迭代d将仅遍历键。

话虽如此,这是我的建议如何写这个:

>>> def encode(msg, replacers):
...     return ''.join([replacers.get(c, c) for c in msg])
... 
>>> result = encode('CAN YOU READ THIS',{'A':'4','E':'3','T':'7','I':'1','S':'5'})
>>> result
'C4N YOU R34D 7H15'

注意事项:

    可以使用回退值作为第二个参数调用
  • dict.get。如果在字典中找不到它,我告诉它只返回当前字符。
  • 出于性能原因,我使用列表推导作为str.join的参数而不是生成器表达式,这里是excellent explanation