Создание элемента python objectify и добавление атрибутов - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь сериализовать класс python с именем Origin, содержащий словарь в качестве атрибута, в xml с l xml objectify. Этот словарь инициализируется значением "default" для каждого ключа.

class Origin:
    def __init__(self):
        dict = {"A":"default", "B":"default" ...} // my dictionnary has 6 keys actually

Словарь заполняется при первом разборе XML. Не каждый ключ заполнен. Например: dict = {A:"hello", B:"default" ...}

Я хочу создать элемент Origin XML с моим словарем в качестве атрибута, но я не хочу иметь ключи "по умолчанию".

Мое решение заключается во вложении, если:

ìf(self.dict["A"] != "default"):
    if(self.dict["B"] != "default"):
   ...
        objectify.Element("Origin", A=self.dict["A"], B=self.dict["B"]...)

Но это уродливое и непрактичное решение, если у вас более одного или двух ключей.

Есть ли способ сначала создать мой элемент origin = objectify.Element("Origin"), а затем добавить ключи моего словаря ", если они отличаются от" по умолчанию "?

Что-то более динамическое c, например

for key in self.dict:
    if(self.dict[key] != "default"):
        origin.addAttribute(key=self.dict[key])

Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

Я бы отфильтровал словарь только по значениям, которые не "default".

Здесь очень полезна функция понимания слова.

Пример:

data = {
    "A": "foo",
    "B": "default",
    "C": "bar",
}

data = {key: value for key, value in data.items() if value != "default"}
print(data)

Вывод:

{'A': 'foo', 'C': 'bar'}
...