我有一个由201个整数键(0..200)索引的字典。每个键的值都是一个列表。使用以下代码生成:
dictionary=dict.fromkeys(range201,[])
当我尝试将项目附加到属于一个特定索引的列表时,我得到这种奇怪的行为,如果我这样做:
dictionary[1].append("foo")
我希望如此:
>>dictionary
{0:[], 1:["foo"],2:[],...}
但我最终得到了这个:
>>dictionary
{0:["foo"], 1:["foo"],2:["foo"],...}
为了澄清执行操作的上下文,我列举了可以是None
或float
的值列表,我想跳过None
并追加与枚举索引对应的列表的float
:
for i, value in enumerate(valuesList):
if value is None:
continue
dictionary[i].append(value)
这是行为与我使用的整数索引无关,并且我在所有索引处都得到相同的值。我可以使用列表列表并实现我认为的相同结果。但我想了解这种行为。
答案 0 :(得分:1)
这是正常行为。您的词典的所有条目都在初始化时引用了相同的列表。因此,当使用一个键附加元素时,由于所有键都指向相同的列表,因此修改将应用于dic的所有条目。
请改为尝试:
dictionary={}
for i in range(201):
#the loop make the list.__init__() (i.e. the []) being called 200 times
dictionary[i] = []
dictionary[1].append("foo")
print dictionary