繁体   English   中英

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

[英]update string from a dictionary with the values from matching keys

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的键,该函数应该在字典中搜索并用映射字符串替换它。

如果ch不是secret_d的键,则secret_d保持不变。

例如,最终结果应该是'C4N YOU R34D 7H15'

您的函数名称是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'}) 

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

一些问题:

  • 正如rb612所指出的,您的函数定义中有一个错字(“ en d code”)
  • 调用它后,你对函数的返回值没有任何作用
  • msg[ch]试图在字符串中分配项目,但这是不可能的,字符串是不可变的。 您必须构建一个新字符串。 你无法“更新”它。
  • 为了迭代字典d (key, value)对,你必须迭代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作为str.join的参数而不是生成器表达式,这是一个很好的解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM