![](/img/trans.png)
[英]List/Dict comprehension in Python to update a dictionary with keys and values from a string
[英]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'})
但如果你想要一个完整的答案, 这是我的。
一些问题:
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.