Dan*_*elb 15 python dictionary list
在python中我想建立一个使用字典get方法的数组字典,默认情况下提供一个空列表然后填充信息,例如:
dict = {}
for i in range( 0, 10 ):
for j in range( 0, 100 ):
dict[i] = dict.get( i, [] ).append( j )
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试上面的代码时,我没有例外,但我的列表最终如下:
AttributeError:'NoneType'对象没有属性'append'
列表有一个append方法,所以我将我的测试简化为以下内容:
dict = {}
for i in range( 0, 10 ):
dict[i] = dict.get( i, [] ).append( i )
Run Code Online (Sandbox Code Playgroud)
输出如下:
{0:无,1:无,2:无,3:无,4:无,5:无,6:无,7:无,8:无,9:无}
所以我的问题是为什么dict.get(i,[])默认返回None而不是[]?做dict.get(i,list())有同样的问题,所以我有点难过.
Ste*_*yne 21
要解决这个问题,你需要使用Python defaultdict.
http://docs.python.org/library/collections.html#defaultdict-examples
from collections import defaultdict
dict = defaultdict(list)
for i in range( 0, 10 ):
for j in range( 0, 100 ):
dict[i].append( j )
Run Code Online (Sandbox Code Playgroud)
Gab*_*abe 18
这不是dict.get( i, [] )那个回归None,而是append.你可能想要使用dict.setdefault(i, []).append(j)或者只是首先使用a defaultdict.
这是你如何做到的:
d = {}
for i in range( 0, 10 ):
for j in range( 0, 100 ):
d.setdefault( i, [] ).append( j )
Run Code Online (Sandbox Code Playgroud)
请注意,我改为dict,d因为dict已经意味着Python中的东西(你正在重新定义它),我删除了dict[i] =导致错误消息的多余内容.
问题是append返回None而不是列表对象。所以
dict[i] = dict.get( i, [] ).append( j )将 None 分配给dict[i]
但是,您可以做得更简单:
dict.setdefault( i, [] ).append( j )
Run Code Online (Sandbox Code Playgroud)
..引用文档setdefault:
如果 key 在字典中,则返回它的值。如果不是,则插入具有默认值的键并返回默认值
因此,如果键i尚不存在,它会创建它并在其中存储默认值,无论哪种情况,它都会返回键值 - 这是对列表的引用,因此您可以直接修改它。
| 归档时间: |
|
| 查看次数: |
12501 次 |
| 最近记录: |