Сравнение ключей словаря Python (которые являются объектами класса) с помощью множественного компаратора

Я использую пользовательские объекты в качестве ключей в словаре Python. Для этих объектов определены некоторые методы по умолчанию hashи eq, которые используются при сравнении по умолчанию. Но в какой-то функции мне нужно использовать другой способ сравнения этих объектов. Так есть ли способ переопределить или передать новый компаратор для этих ключевых сравнений только для этой конкретной функции.

Обновлено: Мой класс имеет следующий тип функциональности (здесь я не могу редактировать метод hash, это сильно повлияет на другие места)

class test(object):

    def __init__(self,name,city):
        self.name=name
        self.city=city

    def __eq__(self,other):
        hash_equality= (self.name==other.name)
        if(not hash_equality):
            #check with lower
            return (self.name.lower()==other.name.lower())


    def  __hash__(self):
        return self.name.__hash__()

my_dict={}
a=test("a","city1")
my_dict[a]="obj1"
b=test("a","city2")
print b in my_dict  #prints true
c=test("A","city1")
print c in my_dict  #prints false
print c in my_dict.keys() #prints true
# my_dict[c]   throw error

Это нормальная функциональность. Но в одном конкретном методе я хочу переопределить/или передать новый пользовательский компаратор, где новый код hashподобен

def  __hash__(self):
    return self.name.lower().__hash__()

, так что c в my_dictвозвращает ture

или my_dict[c] вернет «obj1»

Извините за столько обновлений.

Как и при сортировке, мы можем передать пользовательский метод в качестве компаратора, есть ли способ сделать то же самое здесь.

6
задан Facundo Casco 14 May 2012 в 21:53
поделиться