Я пытался создать структуру с инвертированным индексом из результата ответа json.Словарь Python, дающий странные результаты
[{"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 [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
Когда я запускаю этот код, он печатает правильный результат для каждого узла, в то время как отслеживание, но в конце казни индексов переменного класса (ДИКТ объект) осталось с странными значениями, и я просто не могу понять, почему?
Вот результат выполнения, я использовал выше приведенный json данные в этом.
дерево = дерево (данные)
и печатает это:
у [0]
е [0, 0]
д [0, 0 , 0]
w [0, 0, 0, 0]
г [0, 1]
т [0, 2]
и [1]
{ 'е': [0], 'Q': [0], 'г' : [0], 'u': [1], 't': [0], 'w': [0], 'y': [0]}
Итак, вы можете видеть здесь, что он печатает правильно результирующий индексный массив для каждого «id», но в конце переменная класса индексы просто показывает, не знаю, что.
PS: На самом деле я не верю в выяснении такого рода личных проблем, но я борюсь с этим, так как целый день. Я спросил одного друга и после некоторого боя, он также сказал, что все кажется мне хорошим.
Так я жду ответа и урока, чтобы узнать от него :)
Спасибо заранее.
Присвоение списка другой переменной и передача списка в качестве параметра не создайте копию списка. В тот же список будут ссылаться новые переменные. – thefourtheye
то, что я должен делать? следует использовать ** _ list = list(); _ list = index_list **? Я предполагаю, что ** list() ** создаст новый пустой список. Я прав? – pravj
Учитывая список, 'the_list', используя' new_list = the_list [:] ', создаст копию списка, который можно изменить, не затрагивая исходный список. – IanAuld