我正在循环浏览此列表并且不理解为什么print(d)
会返回seed
中的每个数字,但指定i["seed"] = d
会指定seed
的最后一个元素。
如何访问seed
中除print()
以外的其他操作的每个元素?
res = []
seed = [1, 2, 3, 4, 5, 6, 7, 8, 9]
i = {}
for d in seed:
print(d)
i["seed"] = d
res.append(i)
print(res)
谢谢!
答案 0 :(得分:1)
问题在于你定义的地方。我认为你打算让一个名为i的字典对象具有名为" seed"的单个属性。并且您想将这些词典添加到res。
实际上你只有一个名为i的字典,你每次通过循环只更新其中的值。
试试这个:
res = []
seed = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for d in seed:
i = {}
print(d)
i["seed"] = d
res.append(i)
print(res)
这将为每个循环创建一个新的i实例,你应该得到你想要的结果。
答案 1 :(得分:0)
问题是只有一个对象i
,并且每次在循环中都会替换它的值。在最后一次迭代中,你的(一个实例)i的值设置为你指定给它的最后一个项目。每次追加到res
时,你基本上都会将一个指针附加到同一个对象上(所以当你的循环结束时你最终会有9个指向同一个对象的指针)。
res = []
seed = [1, 2, 3, 4, 5, 6, 7, 8, 9]
i = {}
for d in seed:
print(d)
i["seed"] = d # this gets replaced every time through your loop!
res.append(i.copy()) # need to copy `i`, or else we're updating the same instance
print(res)
答案 2 :(得分:0)
要回答你的第一个问题,那是因为种子的值被覆盖了,如下所示:
>>> p = {'t':'H'}
>>> p['t'] = 'k'
>>> p
{'t': 'k'}
我对你问题的第二部分感到困惑。再详细说明一下?
答案 3 :(得分:0)
python中的大括号{}
代表dictionaries,它基于键和值工作。每次遍历循环时,都会覆盖密钥:' seed'使用列表种子的当前值。因此,当循环结束时,列表种子的最后一个值是字典i中种子的当前值。