【问题标题】:TypeError 'set' object does not support item assignmentTypeError 'set' 对象不支持项目分配
【发布时间】:2017-03-26 00:34:52
【问题描述】:

我需要知道为什么它不会让我将作业的值增加 1:

keywords = {'states' : 0, 'observations' : 1, 'transition_probability' : 2, 'emission_probability' : 3}
keylines = {-1,-1,-1,-1}

lines = file.readlines()
for i in range(0,len(lines)):
    line = lines[i].rstrip()
    if line in keywords.keys():
        keylines[keywords[line]] = i + 1 << this is where it is giving me the error

我将它作为一个类运行,它运行良好,但现在作为一个内联代码片段它给了我这个错误。

【问题讨论】:

  • 试试keylines = [-1,-1,-1,-1];无论如何,一套只能容纳一个-1“我把它作为一个班级运行,它运行良好” - 不,你错了。
  • 更正:“我在课堂上运行过它,效果很好。”
  • 不,它没有。它不能有。上课并不意味着对一个系列做这件事是合法的!
  • 随你怎么说,但这是我在课堂上使用的完全相同的代码。你可以说它在我的课堂上有效,而不是在这个结构中你想要的,但它并没有改变它有效的事实。
  • 设置对象,正如错误信息告诉你的,不支持项目分配。他们在函数中不支持它,在模块中不支持它,在类中也不支持它。这只是事实。您实际上并没有显示您认为它正在工作的示例,但是错误的行不同或定义 keylines 的行不同,因为两者的比较会告诉您而不需要问这个问题.

标签: python python-3.x dictionary set typeerror


【解决方案1】:

你正在使用一个集合,你想要一个用方括号创建的列表:

keylines = [-1,-1,-1,-1]

【讨论】:

    【解决方案2】:

    我很惊讶这里没有答案,所以添加一个点击这里显示的更常见方式之一的答案,以防其他人从搜索中点击这个并需要知道。

    目前尚不清楚 OP 是尝试将其用作集合还是第二个字典,但就我而言,由于 Python 中的一个常见缺陷,我遇到了错误。

    这取决于两件事:

    在 Python 中,字典和集合都使用 { }。 (从 python 3.10.2 开始)

    您不能创建只有键而没有值的字典。因此,如果你只做 a_dict = {1, 2, 3} 你不做一个字典,你做一个集合,如下例所示:

    In [1]: test_dict = {1, 2, 3}
       ...: test_set = {1, 2, 3}
       ...:
       ...: print(f"{type(test_dict)=} {type(test_set)=}")
    
    type(test_dict)=<class 'set'> 
    type(test_set)=<class 'set'>
    

    如果您想声明一个只包含键的字典,您需要将值添加到您的键:值对。但是,you can use None

    In [4]: test_dict = {1: None, 2: None, 3: None}
       ...: test_set = {1, 2, 3}
       ...:
       ...: print(f"{type(test_dict)=} {type(test_set)=}")
    type(test_dict)=<class 'dict'> 
    type(test_set)=<class 'set'>
    

    dict.fromkeys([1, 2, 3])

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 2014-02-18
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 2013-08-16
      • 1970-01-01
      相关资源
      最近更新 更多