【问题标题】:How to assign to a list in a dictionary如何分配给字典中的列表
【发布时间】:2016-02-19 17:24:50
【问题描述】:

对不起,我已经搜索过这个,它看起来很简单,但我无法弄清楚。我正在尝试将值分配给我的字典中的列表:

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', '', '']

【问题讨论】:

  • 你让它工作了吗?

标签: python list dictionary assign


【解决方案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] = ""  

【讨论】:

  • 谢谢。每个人都发现了这个问题,这是一个愚蠢的问题。呃..我猜是第一个人的功劳。
【解决方案2】:

好吧,因为在创建 x 之后,您在其上调用 clearDict,这会将 x.test 更改为 {"color": '', "incandescence": ''}

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

【讨论】:

    【解决方案3】:

    问题在于您的 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")
    

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

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 2018-08-20
      • 2021-12-27
      • 2017-08-24
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多