0

我正在尝试将一个名为 Origin 的 python 类(包含作为属性的字典)序列化为带有 lxml objectify 的 xml。该字典使用每个键的值“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 元素,但我不想拥有“默认”键。

我的解决方案是嵌套 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"),然后添加我的字典键?

更有活力的东西,比如

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

谢谢

4

1 回答 1

1

我会将字典过滤为仅不是"default".

dict理解功能在这里有很大帮助。

例子:

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'}
于 2020-04-17T16:41:44.603 回答