【发布时间】:2014-10-12 06:24:59
【问题描述】:
我试图从 json 响应结果中生成类似倒排索引的结构。
[{“节点”:[{“节点”:[{“节点”:[{“id”:“w”}],“id”:“q”}],“id”:“e” },{"id":"r"},{"id":"t"}],"id":"y"}, {"id":"u"}]
这是示例 json 数据,我正在尝试跟踪每个“id”对象的索引。 例如,在给定的示例中,“id”等于“u”的对象具有索引 [1],而“id”等于“q”的对象具有索引 [0[0[0]]]。
这里的结果索引表示是数组的形式,所以分别是[1]和[0,0,0]。
我已经为此编写了这段代码。
class Tree:
def __init__(self, data):
self.data = data
self.indices = {}
self.create_index(self.data)
def create_index(self, data):
for i in range(len(data)):
self.trace_node(data[i], i, [])
print self.indices
def trace_node(self, node, index, index_list):
_list = index_list
_list.append(index)
self.indices[node['id']] = _list
print node['id'], _list
try:
for i in range(len(node['node'])):
self.trace_node(node['node'][i], i, _list)
except:
pass
当我运行此代码时,它会在跟踪时为每个节点打印正确的结果,但在执行结束时,indices 类变量(dict object)被留下有奇怪的值,我就是想不通,为什么?
这里是执行的结果,我用上面给定的json data在这个。
树 = 树(数据)
然后打印出来:
y [0]
e [0, 0]
q [0, 0, 0]
w [0, 0, 0, 0]
r [0, 1]
t [0, 2]
你 [1]
{'e':[0],'q':[0],'r':[0],'u':[1],'t':[0],'w':[0 ], 'y': [0]}
所以你可以在这里看到它为每个 'id' 打印正确的结果索引数组,但最后类变量 indices 只是显示,不知道是什么。
PS:其实我不相信问这种个人问题,但我整天都在和这个作斗争。我也问过我朋友,经过一段时间的争吵,他也说我觉得一切都很好。
所以我正在等待答案和从中吸取教训:)
提前致谢。
【问题讨论】:
-
将列表分配给另一个变量并将列表作为参数传递,不要创建列表的副本。新变量将引用相同的列表。
-
那我该怎么办?我应该使用 _list = list();_list = index_list 吗?我想 list() 将创建一个新的空列表。我说的对吗?
-
给定一个列表,
the_list使用new_list = the_list[:]将创建一个可以更改而不影响原始列表的列表副本。 -
天哪!我怎么还是错过了这个。感谢 thefourtheye 和@lanAuld。它现在工作正常,我应该删除问题还是更新答案?
-
@pravj 一旦你找到了问题的根源(分配不傻),这个问题有很多重复;我建议删除它。否则,您应该将答案放在答案中,而不是问题中。
标签: python json class dictionary inverted-index