Python从dict的值中删除属性

2024-10-05 22:51:48 发布

您现在位置:Python中文网/ 问答频道 /正文

想象一下下面的类:

class ThisObj:
    def __init__(self, kleur, voedsel, isCool, omschrijving):
        self.kleur = kleur
        self.voedsel = voedsel
        self.isCool = isCool
        self.omschrijving = omschrijving

我正在创建该类的两个实例:

obj1 = ThisObj(12, "graan", False, "Cooleman")
obj2 = ThisObj(13, "water", True, "Gekkeman")

我将这两个实例都放入了词典:

dict = {"AAT_FAN_CORR_VSPD_STEP_MPV": obj1,
        "C_AIM_ct_DPF-DeltaP_X": obj2}

对于第二本词典,我也会这样做:

obj3 = ThisObj(12, "graan", False, "Watermeloen")
obj4 = ThisObj(14, "ranja", True, "Gekkeman")

dict2  = {"AAT_FAN_CORR_VSPD_STEP_MPV": obj3,
          "C_AIM_ct_DPF-DeltaP_X": obj4}

两本词典都填好后,我想比较一下。但没有“voedsel”属性。比较它们应该如下所示:

del dict["voedsel"]

items = dict ^ dict2

这会在删除时引发一个键错误

KeyError: 'voedsel'

所以我的问题是:在不考虑值的一个属性的情况下,如何比较这两个字典。在对象进入字典之前不可能修改它们,这是因为在实际情况中,我是从另一个脚本获取字典的,我不允许更改它


Tags: 实例selffalsetrue字典dictiscoolobj2
1条回答
网友
1楼 · 发布于 2024-10-05 22:51:48

要在忽略其中一个属性的情况下比较两个对象,可以为比较定义__eq__

def __eq__(self,other):
    return self.kleur == other.kleur and self.isCool == other.isCool and self.omschrijving == other.omschrijving

然后:

obj1 = ThisObj(13, "water", True, "Gekkeman")
obj2 = ThisObj(13, "ranja", True, "Gekkeman")
print(obj1 == obj2) # True

如果这是一次性比较,而不是对象的定义特征,则仍然可以手动比较属性:

def compare(a,b):
    return a.kleur == b.kleur and a.isCool == b.isCool and a.omschrijving == b.omschrijving

相关问题 更多 >