在python中将项附加到字典内的列表时的奇怪行为

2024-09-28 20:44:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由201个整数键(0..200)索引的字典。每个键的值都是一个列表。生成代码如下:

dictionary=dict.fromkeys(range201,[])

当我尝试将属于某个特定索引的项附加到列表中时,会出现这种奇怪的行为,如果我这样做:

dictionary[1].append("foo")

我希望这样:

>>dictionary
{0:[], 1:["foo"],2:[],...}

但我的结局却是:

>>dictionary
{0:["foo"], 1:["foo"],2:["foo"],...}

为了澄清执行操作的上下文,我正在枚举一个值列表,这些值可以是Nonefloat,我想跳过None,并将float附加到对应于枚举索引的列表中:

for i, value in enumerate(valuesList):
    if value is None:
        continue
    dictionary[i].append(value)

这是一种独立于我使用的整数索引的行为,并且我在所有索引中都得到相同的值。我可以使用一个列表列表来实现我认为相同的结果。但我想了解这种行为。你知道吗


Tags: 代码none列表fordictionary字典foovalue
1条回答
网友
1楼 · 发布于 2024-09-28 20:44:37

这是正常的行为。字典中的所有条目在初始化时都引用了相同的列表。因此,当使用一个键附加一个元素时,由于所有键都指向同一个列表,因此修改将应用于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

相关问题 更多 >