如何分配给字典中的列表

How to assign to a list in a dictionary

抱歉,我已经搜索过了,它看起来很简单,但我无法弄清楚。我正在尝试为字典中的列表赋值:

class Test(object):
    def __init__(self):

        self.test =  { "color": ["", "", "", ""],
                          "incandescence": ["", "", "", ""] }

    def setTest(self):
        key = "color"
        print "KEY is", key
        self.test[key][0] = "TEST"

        print self.test

    def clearDict(self):  
        for key in self.test:
            self.test[key] = ""      

x = Test()
x.clearDict()
x.setTest() 

错误:第 1 行:类型错误:文件第 10 行:'str' 对象不支持项目分配 #

为什么我不能将字符串分配给第 0 个元素?这怎么不一样:

test = ["", "", ""]

test[0] = "test"

print test

答案:['test', '', '']

clearDict

def clearDict(self):  
    for key in self.test:
        self.test[key] = ""  

您正在将字典元素设置为空字符串。我想你想要这样的东西:

    def clearDict(self):  
    for key in self.test:
        for l in self.test[key]:
            self.test[key][l] = ""  

嗯,因为在创建 x 之后,您调用 clearDictx.test 更改为 {"color": '', "incandescence": ''}

因此,当之后调用 setTest 时,您试图将字典中空字符串值的第一个元素设置为 "TEST",但失败了,因为字符串是不可变的。

问题出在您的 clearDict 方法中...您正在将 self.test[key] 的值设置为字符串

self.test[key] = ""

一旦你这样做,你就不能为字符串的一部分设置索引...如果你改变你的方法来创建一个新列表,你会更幸运。

self.test[key] = []

备注

顺便说一句,您可以像这样初始化,而不是使用 [0] 符号来设置第 0 个元素:

def __init__(self):
    self.test = { "color": [], "incandescence": [] }

然后简单地附加到您的列表中以添加项目

def set_test(self):
    self.test["color"].append("TEST")

无需确切知道列表中有多少元素即可获得相同的结果。