![](/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.