簡體   English   中英

Python從dict的值中刪除屬性

[英]Python remove attribute from value of dict

想象一下下面的類:

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

這會在刪除時引發 Key 錯誤。

KeyError: 'voedsel'

所以我的問題是:如何在不考慮值的屬性之一的情況下比較這樣的兩個字典。 在對象進入字典之前無法更改對象,這是因為在實際情況下,我是從另一個不允許更改的腳本中獲取字典。

要比較忽略屬性之一的兩個對象,您可以定義__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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM