簡體   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