私はPython辞書のキーとしてカスタムオブジェクトを使用しています。これらのオブジェクトにはデフォルトのハッシュとeqメソッドが定義されていますが、デフォルトの比較で使用されています しかし、これらのオブジェクトを比較するには、別の方法を使用する必要があります。 この特定の関数に対してのみ、これらのキー比較のために新しい比較演算子をオーバーライドするか、または渡す方法はありません。Python辞書キー(クラスオブジェクト)複数の比較関数との比較
更新日:私のクラスには、機能の種類を以下ました(私はハッシュ方法を編集することはできませんここでは、それは他の場所で多くの影響を与えます)
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
これは通常の機能です。しかし、ある特定の方法では、私は上書き/またはc in my_dict
リターンが
またはmy_dict[c] will return "obj1"
をTUREように、新しいハッシュコードが
def __hash__(self):
return self.name.lower().__hash__()
のようなものです新しいカスタム比較子を渡したいです多くの更新。
ソートの場合と同様に、カスタムメソッドをcomparerとして渡すこともできます。ここで同じことを行う方法はありますか。
私は質問を誤読しました(ソーティングに関するものだと思いました)。それでも、達成しようとしていることを説明するコードをいくつか用意してください。 –
私は1つの関数だけで特定の比較メソッドを必要としています。ソート方法では、ソートではcompareerを渡すことができますが、キーをチェックしている間に行うことができます – gsagrawal
ところで、 '__eq__'関数はハッシュを比較しますか?ハッシュには衝突が存在することがあるため、予期しない動作が発生することがあります。 –