2013-12-15 98 views
0

我有一個使用鄰接表來跟蹤頂點和邊的圖類,以及具有預定散列函數,看起來像下面的一個頂點類:從python的哈希中獲取字典的關鍵?

class Vertex(): 
    def __init__(self, name): 
     self.name = name 
    def __hash__(self): 
     return hash(self.name) 

本質上說,在我的Graph類,我有一個名爲addVertex的方法,它接受一個頂點對象並在添加它之前檢查它是否存在於Graph中。如果它已經存在,我想返回已經在圖中的對象,而不是我傳入方法的參數。我將如何去實施這個?

class Graph(): 
    def __init__(self): 
     self.adjList = {} 

    def addVertex(vertex): 
     try: 
      self.adjList[vertex] 
      return ??????????? 
     except: 
      self.adjList[vertex] = {} 
      return vertex 

回答

1

只需使用一個成員測試:

if vertex in self.adjList: 

dict.__contains__的實施將自動使用__hash__特殊方法。

請注意,您Vertex類還必須實現一個__eq__平等方法:

class Vertex(): 
    def __init__(self, name): 
     self.name = name 
    def __hash__(self): 
     return hash(self.name) 
    def __eq__(self, other): 
     if not isinstance(other, type(self)): 
      return NotImplemented 
     return self.name == other.name 
+0

此外,後'Vertex'括號是多餘的。 :P – iCodez

+0

當然,但我試圖迴應OP使用的風格,其中風格並不重要。 –