Python удалить атрибут из значения dict - PullRequest
0 голосов
/ 23 марта 2020

Представьте себе следующий класс:

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}

После заполнения обоих словарей я хочу сравнить их. Но без атрибута "воедсель". Сравнение их должно выглядеть следующим образом:

del dict["voedsel"]

items = dict ^ dict2

Это вызывает ключевую ошибку при удалении.

KeyError: 'voedsel'

Итак, мой вопрос: как мне сравнить два словаря, как это, не принимая на счету один из атрибутов стоимости. Невозможно изменить объекты до того, как они go войдут в словарь, это потому, что в реальном случае я получаю словарь из другого скрипта, который мне не разрешено изменять.

1 Ответ

0 голосов
/ 23 марта 2020

Для сравнения двух объектов, игнорирующих один из атрибутов, вы можете определить __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

Если это одноразовый сравнение, а не определяющая характеристика c объектов, тогда вы все равно можете вручную сравнить атрибуты:

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