Изменение словаря Python из введенной пользователем точечной нотации - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь предоставить API-интерфейс в моем приложении на Python для Django, который позволяет кому-то вводить id, а затем также включать ключ / значения в запрос в качестве данных формы.

Например,следующие имя поля и значения для билета 111:

ticket.subject = Hello World
ticket.group_id = 12345678
ticket.collaborators = [123, 4567, 890]
ticket.custom_fields: [{id: 32656147,value: "something"}]

На бэкэнде у меня есть соответствующий Dict, который должен соответствовать этой структуре (и я бы сделал проверку).Примерно так:

ticket: {
    subject: "some subject I want to change",
    group_id: 99999,
    collaborator_ids: [ ],
    custom_fields: [
        {
            id: 32656147,
            value: null
        }
    ]
}

1) Я не уверен, что это самый лучший способ разбора точечной нотации, и 2) Предполагая, что я могу его проанализировать, как я могу изменитьзначения Dict, чтобы соответствовать тому, что было передано. Я мог бы представить что-то вроде класса с этими входами?

class SetDictValueFromUserInput(userDotNotation, userNewValue, originalDict)
    ...

SetDictValueFromUserInput("ticket.subject", "hello world", myDict)

1 Ответ

0 голосов
/ 16 мая 2018

Самым быстрым способом, вероятно, является разбиение строки и индексация на основе разделения. Например:

obj = "ticket.subject".split(".")
actual_obj = eval(obj[0]) # this is risky, they is a way around this if you just use if statements and predifined variables. 
actual_obj[obj[1]] = value

Для дальнейшего индексирования, когда такой объект, как ticket.subject.name, может работать, попробуйте использовать цикл for.

for key in obj[1:-2]: # basically for all the values in between the object name and the defining key
  actual_obj = actual_obj[key] # make the new object based on the value in-between.
actual_obj[obj[-1]] = value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...