2017-03-08 68 views
0

我想要實現的編程模式是:創建一個對象,如果它從集合中缺失 將其添加到集合中,否則更新集合中的等效對象。Python集合創建如果丟失,更新(如果存在)

class PersonStats(object): 
    def __init__(self, i): 
     super(PersonStats, self).__init__() 
     self.id = i 
     self.stats = 0 

    def update_stats(self): 
     self.stats += 1 

    def __key(self): 
     return self.id 

    def __eq__(self, y): 
     return self.__key() == y.__key() 

    def __hash__(self): 
     return hash(self.__key()) 


s = set_like_collection() 

special_person = PersonStats(22222) 

r = s.find(special_person) 
if r is not None: 
    r.update_stats() 
else: 
    s.add(r) 

我很驚訝地發現Python的集合沒有find函數。 (其中一個需要遍歷集合以查找她想要的對象) 我知道我可以使用defaultdict,但我討厭打破PersonStats的封裝,也就是說,在上面的例子中,使用人員ID爲 的PersonStats類。

所以我的問題是你知道在Python中的數據結構,讓我有一個unordered_set,並讓我在它的恆定時間?
也想知道如果我想這一切都是錯誤的。
此外,如果你知道爲什麼Python的集合沒有查找功能。

+3

要查找某個對象是否在使用'in'的集合中,例如'my in_set'中。 – nbro

+2

'find'僅在它返回對象中的位置時纔有意義。由於'set'是無序的,'in'足以告訴你對象是否在集合中。 –

+0

而且''是恆定的時間。 – Denziloe

回答

相關問題