python 默认字典 lambda

python defaultdict lambda

我正在尝试 python 中的 defaultdict。代码如下:

dd = defaultdict(lambda :[0,0])
dd[5][4] = 2
print(dd)

但是它抛出一个 IndexError

IndexError: list assignment index out of range

一旦我将代码更改为

dd[2][1] = 2

结果是:

defaultdict(<function <lambda> at 0x000001F9F10EE730>, {2: [0, 2]})

不知道为什么索引超出范围,范围是怎么来的

谢谢!

您的 defaultdict 生成一个长度为 2 的默认条目。

当您执行 dd[5][4] = 2 时,由于键 5 不存在,defaultdict 会按预期生成 [0,0] 值。

那么您正在访问超出范围的第 5 个索引(就像您所做的 [0,0][4] = 2

(当然它适用于 dd[2][1] = 2 因为 1 在默认列表范围内)

如果您不知道列表的大小并且不想知道,我建议在默认整数字典上使用默认字典,如下所示:

dd = defaultdict(lambda : defaultdict(int))

(当然,这不会生成一个数组,而是一个字典的字典,但是 dd[5][4] 构造立即起作用)