2015-03-13 86 views
1

我在Python這樣的功能:元組的關鍵,字典上說:「元組」對象不支持項目分配

def initialize(s,cfg): 
    pi={}, 
    for i,w in enumerate(s): 
     j=i+1 
     for X,rhs in cfg.items(): 
      if rhs.has_key(w): 
       print (j,j,X),rhs[w] 
       pi[(j,j,X)]=rhs[w] 
    return pi 

,並在運行時,我得到

pi[(j,j,X)]=rhs[w] 
TypeError: 'tuple' object does not support item assignment 

它上面的打印返回(1, 1, 'DT') 1.0

我必須失去了一些東西,但據我可以看到我不是變異的元組。爲什麼我得到這個錯誤?

在一個點上我認爲這可能是由於J和X被指出並試圖創造一個新的記錄,但沒有奏效。我也試過這個外殼:

>>> pi={} 
>>> X="DT" 
>>> j=1 
>>> t=(j,j,X) 
>>> pi[t]=1.0 
>>> pi 
{(1, 1, 'DT'): 1.0} 

正如你所看到的,它的一切工作。任何想法,爲什麼我的功能tuple does not support item assignment error,但不在殼上?

回答

5

您有這條線後面的逗號:

pi={}, 

這是速記:

​​

換句話說,圓周率是一個元組。

+1

確實。如果你認爲一個變量是一個字典,並且Python告訴你它是一個元組,那麼首先要做的是*假設Python是正確的*並且找出變量爲什麼是元組而不是字典。 – kindall 2015-03-13 18:07:47

+1

值得注意的是'dict.has_key'已經在Python 3.x中被刪除了,現在最好的做法是使用'if w in rhs'多年。 – 2015-03-13 18:09:57

相關問題