Удалить ключ на произвольной глубине во вложенном словаре

#python #python-3.x #dictionary

#python #python-3.x #словарь

Вопрос:

Моя цель — удалить значение из вложенного словаря.

Допустим, у меня есть словарь: d = {'a': {'b': {'c': 10, 'd': 4}}} .

Я знаю, что я мог бы сделать: del d['a']['b']['d'] .

Но у меня есть список вложенных ключей неизвестной длины. Я хочу создать такое же поведение, как указано выше, если у меня есть список ['a', 'b', 'd'] . Проблема в том, что я не знаю длину списка ключей, чтобы использовать приведенный выше синтаксис.

Для доступа к значению с тем же вводом, это просто:

 def dict_get_path(dict_in: Dict, use_path: List):
    # Get the value from the dictionary, where (eg)
    # use_path=['this', 'path', 'deep'] -> dict_in['this']['path']['deep']
    for p in use_path:
        dict_in = dict_in[p]
    return dict_in
  

Но я не могу придумать какой-либо аналогичный способ удаления элемента без повторного построения всего словаря.

Ответ №1:

Используйте тот же цикл, за исключением остановки перед последней клавишей. Затем используйте это для удаления из самого внутреннего словаря.

 def dict_del_path(dict_in: Dict, use_path: List):
    # Loop over all the keys except last
    for p in use_path[:-1]:
        dict_in = dict_in[p]
    # Delete using last key in path
    del dict_in[use_path[-1]]
  

Комментарии:

1. Ах, я не думал о том факте, что в Python все является ссылками; переход в словарь по-прежнему ссылается на тот же словарь, не определяя ничего нового, вот почему это работает. Простое решение — спасибо!