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]
构造立即起作用)
我正在尝试 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]
构造立即起作用)