Вот один из подходов.Я предполагаю, что вы можете положиться на свои ключи для правильного представления древовидной структуры (без «310000» без «300000» - это вызовет проблемы, если вы не обработаете отсутствующие узлы при добавлении их в TreeCtrl.)
Я бы начал с реорганизации данных, чтобы вы могли получить связанные данные для каждого узла по ключу, а также сохранить некоторую дополнительную информацию в каждом узле.
# original list of dicts
tree = [{'000000': [['apple', 'pear']]},
{'100000': ['good', 'bad']},
{'200000': ['yeah', 'ogg']},
{'300000': [['foo', 'foo']]},
{'310000': [['#'], ['#']]},
{'320000': ['$', ['1']]},
{'321000': [['abc', 'abc']]},
{'322000': [['#'], ['#']]},
{'400000': [['yeah', 'baby']]}]
# reorganize your data into a dict:
# {'000000': {'data':[['apple', 'pear']]},
# '100000': {'data':['good', 'bad']}, ...
tree = dict([(item.keys()[0], {'data':item[item.keys()[0]]})
for item in tree])
Затем перейдите к рисункуиз родительского идентификатора для каждого узла, заменив последнюю ненулевую цифру ключа на ноль, а затем добавив его обратно к исходному количеству цифр.Обновите каждый dict с родительским идентификатором:
for key in tree_dict.keys():
parent_id = key.strip('0')[:-1].ljust(len(key), '0')
# If it's all zeros, set it to None so we know the parent is root
if int(parent_id) == 0:
parent_id = None
tree_dict[key].update({'parent':parent_id})
. Это прекрасно настраивает вас на использование wx.TreeCtrl, поскольку каждый узел теперь имеет ссылку на своего родителя:
{'000000':{'data': [['apple', 'pear']], 'parent': None},
'100000':{'data': ['good', 'bad'], 'parent': None},
'200000':{'data': ['yeah', 'ogg'], 'parent': None},
'300000':{'data': [['foo', 'foo']], 'parent': None},
'310000':{'data': [['#'], ['#']], 'parent': '300000'},
'320000':{'data': ['$', ['1']], 'parent': '300000'},
'321000':{'data': [['abc', 'abc']], 'parent': '320000'},
'322000':{'data': [['#'], ['#']], 'parent': '320000'},
'400000':{'data': [['yeah', 'baby']], 'parent': None}}
Addкорневой узел к вашему wx.TreeCtrl, а затем пошагово перебирайте отсортированные ключи ввода, добавляя данные из каждого элемента в TreeCtrl, как вы хотите, чтобы они отображались.И для каждого добавляемого элемента снова обновите его dict с помощью TreeItemId, возвращаемого AppendItem () или InsertItem ().Если значение 'parent' в dict равно None, вы знаете, что родитель должен быть корневым узлом.Если это не так, используйте родительское значение для получения TreeItemId родительского узла, который должен был быть обновлен при добавлении его в TreeCtrl.
Надеюсь, это имеет смысл.