2008-10-06 91 views
18

我有一個列表字符串標記。python字典更新方法

我想初始化一個字典,把鍵作爲標記字符串和值作爲數組索引。

for i, ithTag in enumerate(tag): 
    tagDict.update(ithTag=i) 

上述返回箱{「ithTag」:608} 608是第608次索引

我的問題是,雖然i被解釋爲一個變量,Python是治療「ithTag」作爲一個字符串而不是一個變量。

我很困惑,這種類型的具體問題很難。我希望我正確地回答了這個問題的標題,

謝謝!

+0

這是一個幾乎可以解決的問題。我認爲只有選擇的答案比[這一個]更糟糕(http://stackoverflow.com/a/179005/131120)。想要改變或解釋選擇for-loop答案背後的原因嗎? – erikbwork 2013-12-17 12:31:27

+0

我選擇了那個,因爲傑羅布先回答了;我只是馬上標記出來。同樣來自C#/ Java背景,Jerub的答案看起來更加熟悉,我喜歡他解釋爲什麼.update()不適合我。 – freshWoWer 2014-01-04 00:05:20

回答

46

你真的想這樣做:

for i, tag in enumerate(tag): 
    tagDict[tag] = i 

的.update()方法用於使用其他字典,而不是改變一個鍵/值對更新的字典。

2

我想這是你想要做什麼:

d = {} 
for i, tag in enumerate(ithTag): 
    d[tag] = i 
2

嘗試

tagDict[ithTag] = i 
17

如果你要聰明一點:

tagDict.update(map(reversed, enumerate(tag))) 

感謝Brian進行更新。這顯然比迭代版本快5%。

(編輯:您指出我的答案是不正確的(現已修復)可能是最有效的/ Python的方式將託斯滕馬立克氏回答感謝薩維里奧,略作修改:

tagDict.update((t, i) for (i,t) in enumerate(tag)) 

+0

實際上,update()可以直接使用一個序列,因此不需要構造中間字典。做tagDict.update(枚舉(標籤))實際上比迭代版本稍快(〜5%)。 – Brian 2008-10-06 08:34:49

12

這是一個班輪:

tagDict = dict((t, i) for i, t in enumerate(tag)) 
2

我想你想要的是這樣的:

for i, ithTag in enumerate(tag): 
    tagDict.update({ithTag: i})