字典类型创建空数组
我的目的是想,在一个字典中创建一个有序key 键,然后用哈希映射,在每个key键后面是一个list数组。像这样:{0:[3,6,9],1:[4,7,10],...},由于key 键值较多,所以我想用fromkeys来初始化n个空list。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
dict1={}
dict1=dict1.fromkeys(range(2),[])
print dict1
输出:{0: [], 1: []}
OK,下一步,往list中添加元素。
dict1[0].append(2)
print dict1
输出:{0: [2], 1: [2]}
??我不是只对key键为0的list添加的吗?为啥key键为1的也有?
然后,我又测试了一段代码:
dic = {0: [],1:[]}
print dic
dic[0].append(1)
print dic
输出:{0: [], 1: []}
{0: [1], 1: []}
可以了?但是我不能手动一个一个输入,因为我要的量比较大。所以我就把字典换成了list。
代码:list1=[[]for iin xrange(3)]
print list1
list1[0].append(3)
print list1
输出:[[], [], []]
[[3], [], []]
后来查资料,发现原因是这样的:
def fromkeys(*args, **kwargs): # 将所有key都赋予相同的值,第一参数为key,第二个
参数为value,如果没有第二个参数则默认为none;
噢! 那么说将列表赋值给第一个参数key值,那是怎么赋值的呢? 我们来看下面一个例子:
代码:dict1={}
dict1=dict1.fromkeys(range(2),[])
print dict1
print id(dict1[0])
print id(dict1[1])
结果:{0: [], 1: []}
36286024
36286024
原来字典中的key同时指向了一个列表。那我要是非要把字典中每个key定义不同的列表呢?那只能这样了:
test = {}
for i in range(10):
test[i] = []
暂时想到这些,有好的建议,希望留言。谢谢!