【问题标题】:Editing Values in the List of Dictionaries in Python在 Python 中编辑字典列表中的值
【发布时间】:2023-03-20 21:11:01
【问题描述】:

我有一个 python 字典列表。字典包含我需要为所有字典更新的“sequenceId”,以确保每个 sequenceId 是偶数且不可重复的。 为了更新 sequenceIds,我使用了 for 循环,但行为不是我所期望的。

seqId = 0
for index in range(20):
    FinalNodes[index]['sequenceId'] = seqId
    seqId +=2

print(FinalNodes[7]['sequenceId'])

预期输出:- 14

观察到的输出:- 38

这是完整的代码片段

import json
import time

with open('test.json', "r") as json_file:
    data = json.load(json_file)

numberofJobs = 10

NodesList = data['nodes']
nNodes = len(NodesList)
#Divide all node into first, main and last
MainNodes = NodesList[1:nNodes-1]
FirstNode = NodesList[0:1]
LastNode  = NodesList[nNodes-1:nNodes] 

#prepare final nodes
FinalNodes = FirstNode.copy()
for i in range(numberofJobs):
    FinalNodes.extend(MainNodes)
FinalNodes.extend(LastNode)

print(FinalNodes[7]['sequenceId'])

seqId = 0
for index in range(0,20):
    FinalNodes[index]['sequenceId'] = seqId
    seqId +=2
    print(FinalNodes[index]['sequenceId'],index)


print(FinalNodes[7]['sequenceId'])

循环内的输出:-

0 0
2 1
4 2
6 3
8 4
10 5
12 6
14 7
16 8
18 9
20 10
22 11
24 12
26 13
28 14
30 15
32 16
34 17
36 18
38 19

【问题讨论】:

  • 我认为发生的事情是FinalNodes 中的所有字典都引用同一个对象,所以基本上你一遍又一遍地更新同一个字典,导致值为 38。你能告诉我们你是如何构建FinalNodes的吗?
  • 当我使用 FinalNodes[index] 作为列表运行您的代码时,它给出了正确的结果。但是,问题似乎是您拥有的字段(FieldNodes)正在存储对象 seqId 而不是其值,因此为什么它的所有索引都返回 38(这应该是此循环中最后一个字段的最终输出)
  • 打印整个FinalNodes:这应该告诉你发生了什么。还要检查例如FinalNodes[0] is FinalNodes[1]。 (当这种事情发生时,这用于一般调试帮助,尽管如果您发布生成代码,应该可以通过检查来判断字典是否是同一个对象)
  • 我已经添加了完整的代码sn-p。当我打印整个 FinalNodes 时,我看到了不同的值,但仍然不是预期值。 @TYZ

标签: python json list dictionary


【解决方案1】:

请检查您的 FinalNodes 字典,因为我运行了相同的代码,它工作正常!

FinalNodes= []
for i in range(20):
    FinalNodes.append({"sequenceId":0})
seqId = 0
for index in range(8):
    FinalNodes[index]['sequenceId'] = seqId
    seqId +=2

print(FinalNodes[7]['sequenceId']) #14

【讨论】:

  • 如果您将循环运行到“8”,您将得到 14。尝试运行到 20
  • 即使您将代码运行 20 次迭代,它也会给您 14 作为结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2022-11-16
  • 2010-12-25
  • 2020-07-21
相关资源
最近更新 更多