我上课了。
class Part:
def __init__(self,name):
self.name = name
self.count = 0
def __hash__(self):
return hash(self.name)
def __lt__(self,other):
return self.count < other.count
def __eq__(self,other):
return self.name == self.count
我创建了一堆这些对象,并用它们填充列表。此列表最终包含重复项。我需要在我的代码中为一个段,但是当需要输出时,我想只输出每个部分一次。所以我把它贴在一套。
uniqueParts = set(parts)
然后我迭代这个把它写到文件中。
for part in uniqueParts:
f.write(part.name+": "+str(part.count)+'\n')
这不起作用。它输出每个重复。由于uniqueParts是一个集合,因此我的类必须出错,而Set无法判断它们是重复的。
现在,我可以用几种不同的方式解决我的具体问题(重新编写类,所以我不需要它(数据可能太简单,不值得它自己的类)或迭代并删除重复项,或者重写我的代码所以重复从来没有发生在一开始)但是我将来可能再次遇到这个问题,我想知道我需要做些什么才能让集合与我自己编写的类一起工作。
思想/协助?
答案 0 :(得分:9)
这看起来不对:
def __eq__(self,other):
return self.name == self.count
也许你的意思是:
def __eq__(self,other):
return self.name == other.name