#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 все является ссылками; переход в словарь по-прежнему ссылается на тот же словарь, не определяя ничего нового, вот почему это работает. Простое решение — спасибо!