2016-01-29 35 views
1

我在python中使用了一個dict,試圖用dict中的任何字符替換字符串中的單詞。但是,當我嘗試運行我的代碼時,它會在格式說明符後打印出錯誤「ValueError:expected':'。我不知道這個錯誤可能來自哪裏。有更多pythonic智慧有人對我有什麼建議嗎? 謝謝!Python ValueError:格式說明符後的期望':'

這裏是我的代碼示例:

str = """{fruit}""" 
dict = {"fruit":"pears"} 
str.replace(**dict) 

這應該使STR包含 「梨」。

UPDATE

我故意使用三重引號的字符串

- 在我的代碼我試圖做一個多字符串替換, 此外,我的代碼已經在使用該方法.format。我只是決定在我的代碼之間翻譯它時將這些單詞混合到這裏。這是我的示例代碼的更新版本不起作用。

my_dict = """{fruit}""" 
dict = {"fruit":"pears"} 
string.format(**my_dict) 

最後更新

感謝所有我收到以下問題的答案。我沒有很好地解釋我的問題,並決定簡化它,這簡化了我的問題。我正在做一些元編程,所以我試圖在C函數定義中進行替換,python試圖使用「{」作爲格式標識符。我需要使用「{{」來讓Python將括號識別爲字符,而不是一些開頭爲格式標識符的字符。

+1

你能詳細點嗎?這引發了TypeError:replace()在這裏不使用關鍵字參數,因爲它應該如此。 – dhke

+1

拍攝我正在使用格式化功能。出於某種原因,我決定把它稱爲替換>。< – rreichel

回答

7

您想使用format()函數,而不是replace()

string = "{fruit}" 
my_dict = {"fruit": "pears"} 
print(string.format(**my_dict)) 

輸出

pears 

一對夫婦的其他東西:你不應該使用Python關鍵字strdict爲變量名稱。爲了清晰起見,我已經更改了變量名稱。

此外,您使用三行引號的多行字符串沒有特殊原因,所以我也改變了這一點。

+0

嘿!感謝您的回答 - 我剛剛意識到我的意思是說格式而不是替換。我正在使用格式化功能。此外,我使用三重引號,因爲在我的大型應用程序中它是一個多行字符串。這是我應該提供的所有信息。我會更新我的問題來反映這個澄清。並感謝修正變量名稱! – rreichel

+0

如果您已經使用'format',那麼您的代碼應該可以正常工作! – gtlambert

+0

嗯,我仍然得到ValueError:預期':'格式說明符錯誤後。難道是某些代碼沒有正確添加到字典中? – rreichel

1

另一個用字典替換句子的簡單方法。我希望你喜歡簡單。還應考慮該Single Pass Multiple Replace

import re 

s = "node.js ruby python python3 python3.6" 
d = {'python': 'python2.7', 'python3': 'python3.5', 'python3.6': 'python3.7'} 

pattern = re.compile(r'\b(' + '|'.join(d.keys()) + r')\b') 
result = pattern.sub(lambda x: d[x.group()], s) 

print result 

這將只匹配整個單詞。

+1

這是一個非常脆弱的方式來做到這一點。沒有分隔符,所以'pythonic'會變成'python3.3ic',如果'word_mapping'中的任何單詞都是另一個單詞的前綴,那麼可以使用其中的任何一個替換:'word_mapping = {'python':' python2.7','python3':'python3.5'}''可以把'python3'變成'python2.73'或'python3.5',你不知道是哪一個。 – Duncan

+0

是的,你是對的!我編輯了我的答案,現在它只會匹配整個單詞! – python