元组作为字典的键说:“元组”对象不支持项目分配 - python

我在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而不在shell中获得任何想法的想法?

python大神给出的解决方案

您在此行上有一个逗号结尾:

pi={},

简写为:

pi = ({},)

换句话说,pi是一个元组。