class Node(object):
value = {'root': dict()}
allValueList = ['root']
def __init__(self):
pass
def append(self, trail, data):
current = self.value['root']
for item in trail:
if item in list(current.keys()):
current = current[item]
else:
return False
index = self.allValueList.index(trail[-1]) + 1 if len(trail) > 0 else len(self.allValueList)
if isinstance(data, str):
current[data] = dict()
self.allValueList.insert(index, data)
elif isinstance(data, dict):
if len(list(data.keys())) == 1:
current[list(data.keys())[0]] = data[list(data.keys())[0]]
self.allValueList.insert(index, list(data.keys())[0])
for count, item in enumerate(re.findall('[^\[\',\"\]{}: ()]+', str(list(data.items())))[1:]):
self.allValueList.insert(index + count + 1, item)
else:
return False
else:
return False
return True
def remove(self, trail, key):
if key in self.allValueList:
if trail:
current = self.value['root']
for item in trail:
current = current[item]
result = {key: current[key].copy()}
childNode = re.findall('[^\[\',\"\]{}: ()]+', str(list(current[key].items())))
del current[key]
childNode.append(key)
for item in childNode:
self.allValueList.remove(item)
return result
else:
trail = self.find(key)
return self.remove(trail, key)
else:
return False
def find(self, key):
if key in self.allValueList:
target = list()
beginIndex = 0
endIndex = self.allValueList.index(key)
current = self.value['root']
targetList = list(current.keys())[::-1]
while beginIndex < endIndex:
for item in targetList:
if item in self.allValueList[beginIndex + 1: endIndex + 1]:
beginIndex = self.allValueList.index(item)
target.append(item)
current = current[item]
break
if current:
targetList = list(current.keys())[::-1]
pass
elif target[-1] == key:
pass
else:
current = self.value['root']
for item in target[:-1]:
current = current[item]
targetList = list(current.keys())[::-1]
index = targetList.index(target[-1])
targetList = targetList[index + 1:]
target.remove(target[-1])
return target[:-1]
else:
return False
def test(self):
print(self.value, self.allValueList)
if __name__ == '__main__':
node = Node()
node.append([], '0')
node.append([], '1')
node.append([], '2')
node.append(['1'], '3')
node.append(['1', '3'], '5')
node.append(['1', '3'], '4')
node.append(['1', '3', '5'], '6')
node.test()
# print(node.find('6'))
# print(node.find('3'))
d = node.remove(None, '3')
node.test()
node.append(['1'], d)
node.test()