Python字典给出了奇怪的结果

Python字典给出了奇怪的结果,python,json,class,dictionary,inverted-index,Python,Json,Class,Dictionary,Inverted Index,我试图从json响应结果生成一个反向索引结构 [{“node”:[{“node”:[{“node”:[{“id”:“w”}],“id”:“q”}],“id”:“e”},{“id”:“r”},{“id”:“t”}],“id”:“y”},{“id”:“u”}] 这是示例json数据,我所做的只是跟踪每个“id”对象的索引。 例如,在给定的示例中,“id”等于“u”的对象具有索引[1],而“id”等于“q”的对象具有索引[0[0]] 这里的结果索引表示形式为数组,因此分别为[1]和[0,0,0] 我已

我试图从json响应结果生成一个反向索引结构

[{“node”:[{“node”:[{“node”:[{“id”:“w”}],“id”:“q”}],“id”:“e”},{“id”:“r”},{“id”:“t”}],“id”:“y”},{“id”:“u”}]

这是示例json数据,我所做的只是跟踪每个“id”对象的索引。 例如,在给定的示例中,“id”等于“u”的对象具有索引[1],而“id”等于“q”的对象具有索引[0[0]]

这里的结果索引表示形式为数组,因此分别为[1]和[0,0,0]

我已经为此编写了这段代码

类树:
定义初始化(自身,数据):
self.data=数据
self.index={}
self.create_索引(self.data)
def创建索引(自身、数据):
对于范围内的i(len(数据)):
self.trace_节点(数据[i],i,[])
打印自索引
def跟踪节点(自身、节点、索引、索引列表):
_列表=索引列表
_list.append(索引)
self.index[node['id']=\u列表
打印节点['id'],\u列表
尝试:
对于范围内的i(len(节点['node']):
self.trace_节点(节点['node'][i],i,_列表)
除:

通过
正如评论部分所指出的,您需要复制列表

替换

self.indices[node['id']] = _list

您看到奇怪结果的原因是,同一主树分支的所有节点都得到了分配给它们的相同的
\u list
对象。由于您正在执行
\u list.pop()
,最终的
\u list
将成为顶级索引的列表


另外,
node['ch']
应该是代码片段中的
node['node']
。我想这只是一个键入错误:-)

将列表分配给另一个变量并将列表作为参数传递,不要创建列表的副本。新变量将引用相同的列表。那么我应该怎么做?我应该使用_list=list()_列表=索引列表?我想list()将创建一个新的空列表。我说的对吗?给定一个列表,
the_list
使用
new_list=the_list[:]
将创建一个列表副本,可以在不影响原始列表的情况下更改该列表。天哪!!我怎么还没找到呢。谢谢你和拉诺。现在可以了,我是应该删除这个问题还是更新答案?@pravj一旦你找到问题的根源(作业不顺利)这个问题有很多重复的地方;我建议删除它。否则,你应该把答案放在答案中,而不是问题中。
self.indices[node['id']] = _list[:]