Задать вопрос
@ffff567

Можно ли удалить из дерева эту цепочку ходов не перестраивая его заново?

Построили дерево возможных ходов.

Как удалить из дерева эту цепочку: [48, 56, 32, 10, 8, 1] ?

# в словаре x в ключе цепочка ходов в значении оценка
x = {
    (48, 56, 32, 10, 8, 1): -6,
    (48, 56, 32, 10, 1, 8): -12,
    (48, 56, 10, 32, 8, 1, 'пропуск'): -18,
    (48, 56, 10, 1, 32, 'пропуск', 8): 6,
    (48, 56, 10, 1, 8, 32): -12
}

#строим дерево
дерево = {}
for moves, value in x.items():
    узлы = дерево
    for move in moves[0:-1]:
        if move not in узлы:
            узлы[move] = {}
        узлы = узлы[move]
    узлы[moves[-1]] = value

#Получилось вот такое вот дерево
{48: {56: {32: {10: {8: {'value': -6}, 1: {'value': -12}}}, 10: {32: {8: {1: {'value': -18}}}, 1: {32: {'пропуск': {'value': 6}}, 8: {'value': -12}}}}}}
  • Вопрос задан
  • 513 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
iglebov
@iglebov
Backend-разработчик
Да, можно.

Накидал примерный код:

delete_sequence = [48, 56, 32, 10, 8, 1][:-1]

# Проходим по элементам и удаляем необходимый
for element in delete_sequence:
    tree_for_deletion = tree_for_deletion[element]
del tree_for_deletion['value']

# Снова проходим по элементам и проверяем остались ли пустые значения по ключу, если да, то удаляем и завершаем цикл
tree_for_deletion = tree
for element in delete_sequence:
    if not tree_for_deletion[element]:
        del tree_for_deletion[element]
        break
    tree_for_deletion = tree_for_deletion[element]

print(tree)


Вывод:
{48: {56: {32: {10: {1: {'value': -12}}}, 10: {32: {8: {1: {'value': -18}}}, 1: {32: {'пропуск': {'value': 6}}, 8: {'value': -12}}}}}}


Скорее всего можно оптимизировать код.
Буду очень рад, если кто-нибудь поделиться как)
Ответ написан
@TheDigitalMadness
Программист
Все элементарно:
a = {
    '1': 1,
    '2': 2
}

a.pop('1')

print(a)
# {'2': 2}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы