簡體   English   中英

如何分配到字典中的列表

[英]How to assign to a list in a dictionary

對不起,我搜索過這個,看起來很簡單,但我無法弄明白。 我正在嘗試將值分配給我的dict中的列表:

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行:TypeError:文件第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你叫clearDict它而改變x.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")

無需確切知道列表中有多少元素即可獲得相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM