Изменение многозначного словаря через функцию (Python)

Пишу себе библиотеку для удобной работы с json-файлом.

Создаю функцию, чтобы значения можно было изменять в файле сразу. Она выглядит так:

def upload(self, note, key, new_value, noteListIndex=None, place=None, placeListIndex=None, file=self.default_file)

Пример использования:

m.upload(note='profiles', noteListIndex=0, key='name', new_value='No more John')

# note='profiles' -> Означает, что мы будем использовать словарь информации по пользователям
# noteListIndex=0 -> Первый пользователь в списке
# key='name' -> Изменяемый ключ в Информации о Пользователе
# new_value -> Новое значение изменяемого Ключа (key)
# Пояснение всем аргументам будет ниже. Это был пример аргументов в реальной ситуации

Изменяемая часть словаря выглядит так:

{
    'profiles': [{'id': 123, 'name': 'John'}],
    'other': {...},
    'something_else': {...},
    ...
}

Пояснения:

# note -> Тема последующих значений (Главная)
# noteListIndex -> Индекс элемента списка, если note содержит список
# place -> Имя ключа внутри note (Указывается, если ключ после note не является Строкой или Числом)
# placeListIndex -> Индекс элемента списка, если place содержит список
# key -> Ключ
# new_value -> Новое значение Ключа (key)

В данной ситуации нужно изменить file['profiles'][0]['name'], но ведь может быть и другая часть словаря для изменения (и новые пути, собственно).

Я сделал:

def is_digit(self, num): # Функция для определения, можно ли использовать переменную как Число
    return True if (str(num).isdigit()) else False

def upload(self, note, key, new_value, noteListIndex=None, place=None, placeListIndex=None, file=self.default_file): # Сам метод
    data = self.upload_data(file=self.default_file) # Получаем словарь из json-файла
    new_data = {} # Конечный словарь
    way = data[note] # Переменная для изменения значения
    if noteListIndex or (self.is_digit(noteListIndex) and noteListIndex>=0): way = way[noteListIndex] # Если указан noteListIndex, то войти в него
    if place: way = way[place]  # Если указан place, то войти в него
    if placeListIndex or (self.is_digit(placeListIndex) and placeListIndex>=0): way = way[placeListIndex] # Если placeListIndex указан, то войти в него
    new_data = way # Получаем путь
    new_data[key] = new_value # Изменяем значение
    m.save_data(new_data, file=self.default_file) # Сохраняет изменённый json-файл
    return new_data # Возвращаем новые данные (требуется ситуативно)

Но данный метод вернёт Словарь, в котором был изменён key, в этом и проблема. Но я не знаю, как можно перенести данное изменение в полноценный словарь.

Кто-либо может подсказать, как это сделать?


Ответы (0 шт):