2016-02-19 5 views
1

Извините, что я искал это, и кажется простым, но я не могу понять это. Я пытаюсь присвоить значения в список в моем 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: «ул» объект не поддерживает назначения Пункт #

Почему я не могу назначить строку 0-му элементу? Как это не то же самое, как:

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

test[0] = "test" 

print test 

Ответ: [ 'тест', '', '']

+0

Вы получили его на работу? – timgeb

ответ

1

В 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] = "" 
+0

Спасибо. Все в значительной степени нашли проблему, которая была глупой. Ух .. дал кредит первому человеку, которого я предполагаю. – Zak44

1

Ну, потому что после создания x вы звоните clearDict на нем, какие изменения x.test в {"color": '', "incandescence": ''}

Так при вызове setTest после этого вы пытаетесь установить первый элемент пустой строки значения в вашем словаре до "TEST", что не работает, потому что строки неизменяемы.

1

Проблема заключается в методе clearDict ... вы устанавливаете значение self.test [ключ] в строку

self.test[key] = "" 

После того, как вы сделаете это, вы не можете установить часть строки с индекс ... если вы измените свой метод для создания нового списка, вам повезет больше.

self.test[key] = [] 

Примечание

Как и в сторону, вместо того чтобы использовать [0] обозначения, чтобы установить 0-й элемент, вы могли бы инициализировать следующим образом:

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

затем просто добавлены в ваш список для добавления предметов

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

для достижения того же результата без необходимости точно знать, сколько элементов в списке.

Смежные вопросы