创建 python 对象化元素,然后添加属性

Creating python objectify Element and then adding attributes

我正在尝试将名为 Origin 的 python class 序列化为包含字典作为属性的 xml 和 lxml 对象化。此字典使用每个键的值 "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 元素,但我不想拥有 "default" 键。

我的解决方案是嵌套 if:

ì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"),然后添加我的字典键'(如果与 "default" 不同?

更有活力的东西,比如

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

谢谢

我会将字典过滤为仅包含非 "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'}