【发布时间】:2011-04-24 17:43:23
【问题描述】:
在 Python 中,我想使用字典 get 方法构建一个数组字典,默认情况下提供一个空列表,然后填充信息,例如:
dct = {}
for i in range(0, 10):
for j in range(0, 100):
dct[i] = dct.get(i, []).append(j)
但是,当我尝试上面的代码时,我没有发现任何异常,但我的列表最终如下:
AttributeError: 'NoneType' 对象没有属性 'append'
列表有一个append 方法,因此我将测试简化为以下内容:
dct = {}
for i in range(0, 10):
dct[i] = dct.get(i, []).append(i)
输出如下:
{0:无,1:无,2:无,3:无,4:无,5:无,6:无,7:无,8:无,9:无}
所以我的问题是为什么dct.get(i, []) 默认返回None 而不是[]?做dct.get(i, list())有同样的问题,所以我有点难过。
【问题讨论】:
-
请不要使用
dict作为变量名。它与内置的dict类冲突。 -
我通常不这样做,我只是想弄清楚变量是什么。
-
您不希望
dict[i] =位于setdefault前面。请参阅我编辑的答案。 -
您的第一个 setdefault 代码有缺陷,不要分配回 dict[i]。
dict.setdefault( i, [] ).append( j )应该是你所需要的。 -
你说得对,我刚刚想通了。谢谢,我希望我能让你们都正确:(
标签: python list dictionary