class Tree(dict):
"""A tree implementation using python's autovivification feature."""
def __missing__(self, key):
value = self[key] = type(self)()
return value
#cast a (nested) dict to a (nested) Tree class
def __init__(self, data={}):
for k, data in data.items():
if isinstance(data, dict):
self[k] = type(self)(data)
else:
self[k] = data
работает как словарь, но предоставляет столько вложенных диктов, сколько вы хотите.
Попробуйте следующее:
your_tree = Tree()
your_tree['a']['1']['x'] = '@'
your_tree['a']['1']['y'] = '#'
your_tree['a']['2']['x'] = '$'
your_tree['a']['3'] = '%'
your_tree['b'] = '*'
доставит вложенный диктант ... который действительно работает как дерево.
{'a': {'1': {'x': '@', 'y': '#'}, '2': {'x': '$'}, '3': '%'}, 'b': '*'}
... Если у вас уже есть диктант, он будет разыгрывать каждый уровень в дереве:
d = {'foo': {'amy': {'what': 'runs'} } }
tree = Tree(d)
print(d['foo']['amy']['what']) # returns 'runs'
d['foo']['amy']['when'] = 'now' # add new branch
Таким образом, вы можете редактировать / добавлять / удалять каждый уровень диктовок по своему усмотрению
Все методы dict для обхода и т. Д. Все еще применяются.