当列表在循环中迭代时,填充列表时字典值会发生变化

问题描述 投票:0回答:1

我正在尝试填充一个字典,其中键是整数,值是列表。这些列表只是一个整数列表,字典中的每个位置都会变得越来越长,所以我正在寻找如下结果:

{0:[0], 1:[0,1], 2:[0,1,2], 3:[0,1,2,3] ...

我已经尝试过这个代码

dictfinal = {}
List = []
for i in range(0,3):

但是我得到的结果是:


[0]
{0: [0]}
[0, 1]
{0: [0, 1], 1: [0, 1]}
[0, 1, 2]
{0: [0, 1, 2], 1: [0, 1, 2], 2: [0, 1, 2]}

如您所见,每次迭代似乎之前已定义的键的值似乎都在变化!

当编写相同的代码,但用整数而不是列表填充值时,不会出现此问题...

dictfinal = {}
List = []
for i in range(0,3):
      List.append(i)
      dictfinal.update({i:i})
      print(List)
      print(dictfinal)

给予:

[0]
{0: 0}
[0, 1]
{0: 0, 1: 1}
[0, 1, 2]
{0: 0, 1: 1, 2: 2}

这正是我所期望的......那么为什么它在处理列表时不起作用?

感谢您的帮助!

python list dictionary key key-value
1个回答
0
投票

它不起作用,因为您使用相同的列表作为最终字典的每个键的值。

相反,为每个键创建一个独立于其他列表的新列表:

dictfinal = {}
for i in range(3):
    dictfinal[i] = list(range(i + 1))

print(dictfinal)

打印:

{0: [0], 1: [0, 1], 2: [0, 1, 2]}
© www.soinside.com 2019 - 2024. All rights reserved.