Как удалить глубокий вложенный узел в dict by path? - PullRequest
0 голосов
/ 04 июля 2018
// obj.json
{
  "first": [
    {
      "second": {
         "third": "value"
      }
    }
  ]
}

После того, как я загрузил json в dict, есть ли способ удалить "value", например:

path_to_delete = ['first.[0].second.third']
for p in path_to_delete:
    deleteByPath(obj, p)

1 Ответ

0 голосов
/ 04 июля 2018

Вот функциональное решение. Идентификация целочисленных индексов списка по сравнению со строковыми ключами - сложная часть, но здесь мы разберемся с помощью понимания списка.

d = {"first": [{"second": {"third": "value"}}]}

from functools import reduce
from operator import getitem

def removeFromDict(dataDict, mapStr):
    mapList = [int(i[1:-1]) if i.startswith('[') and i.endswith(']') \
               else i for i in mapStr.split('.')]
    del reduce(getitem, mapList[:-1], dataDict)[mapList[-1]]
    return dataDict

d = removeFromDict(d, 'first.[0].second.third')

print(d)

{'first': [{'second': {}}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...