2014-10-30 75 views
0

我正在嘗試創建一個python腳本,它在每次迭代中從字典中的列表中選擇下一項,並用當前項替換文本中的鍵。但是,問題是它不會返回與由變量設置的整數相匹配的列表項。Python沒有按變量返回特定的列表項

代碼:

for x in range(0,runs): 
    for k,v in shortcodes.iteritems(): 
     description = description.replace('{'+k+'}', v[x]) 
    print description 

只需繼續與第一列表項文本替換鍵值,而不是增加。如果我手動刪除x並將其設置爲更高的整數,則它會正確響應。同樣,爲了理智,印刷x,因爲它確認x正在增加。

那麼,爲什麼它忽略x0

回答

1

事情是在你的代碼中,for循環只替換關鍵字的第一次迭代。所有其他迭代都沒有關鍵字需要替換,因爲您已將它們全部替換爲valueitem的第一個元素。

我覺得更可行的解決方案是這樣的

for k,v in shortcodes.iteritems(): 
    for x in v: 
     index = description.find('{'+k+'}') 
     description[index:index+len('{'+k+'}')] = description[index:index+len('{'+k+'}')].replace('{'+k+'}', x) 
print description 

現在你itereate在你的值列表每個鍵,而不是周圍的其他方法, 既然你想改變每個關鍵字與anoter值,你只需要替換你想改變的子串。與find()你得到的實際字符串中的最低索引的子字符串的位置。並與len()你得到的參數值legth

+0

這是否仍然有問題,你指出,但?換句話說,更大的問題是'description = description.replace('{'+ k +'}',x)'應該確實是'new_description = description.replace('{'+ k +'}',x )',對吧? – Tim 2014-11-05 15:32:59

+0

啊你是對的,但這是一個新問題。因爲你現在每次都要替換整個字符串,但是有一個新的值。您應該只更換''''''''''''''''的子字符串。您可以使用'find'在字符串中找到索引 – muthan 2014-11-05 19:07:56

+0

非常好!我將不得不對'find'和'index'做更多的研究。 – Tim 2014-11-10 14:13:12