python defaultdict(list)IndexError:列表赋值索引超出范围

时间:2017-11-07 16:11:57

标签: python python-3.x defaultdict

我正在尝试使用defaultdict(list)

dict = defaultdict(list)
dict['A'][1] = [1]

dict['A'][1] = list([1])

我收到了错误,

IndexError: list assignment index out of range

如果我这样做

dict['A'][1].append(1)

IndexError: list index out of range

我想知道这里有什么问题。

2 个答案:

答案 0 :(得分:4)

这里有一些问题:

  1. 您使用1作为索引值,而默认列表则从索引0开始。

  2. 当您追加时,您不需要指定索引。

  3. 最后,声明一个与内置类型(dict同名)的变量并不是一个好主意,因为这通常会导致意外稍后您将使用内置类型的行为。

  4. 修改后,您的代码将是:

    >>> from collections import defaultdict
    >>> d = defaultdict(list)
    >>> d['A'].append(1)
    >>> d['A']
    [1]
    

答案 1 :(得分:2)

首先,不要使用dict作为名称。使用d之类的内容,这样就不会屏蔽内置名称dict

其次,d['A'][1] = list([1])尝试访问空列表的索引1 (初始化defaultdict的值)并分配给它,那是一个禁忌。

您可能正在寻找:

d = defaultdict(list)
d['A'].append(1)