通过类方法对列表进行字母排序

问题描述:

我一直在尝试使用类的__str__方法来打印列表,但在可以打印列表之前,必须按照类中的__str__方法之前的其他方法按字母顺序排列。为此提供的方法是:通过类方法对列表进行字母排序

def returnName(self): 
    '''return the name of the player first last''' 

    return(self.first + self.last) 

def returnReverseName(self): 
    '''return the name of the player as last, first''' 
    reverseName = (str(self.last), str(self.first)) 
    return(reverseName) 

def __eq__ (self, other): 
    '''determine if this persons name is the same as the other personsname''' 

    if self.returnReverseName == other.returnReverseName: 
     return True 
    else: 
     return False 


def __lt__(self,other): 
    '''determine if this persons name is less than the other persons name alphabetically''' 

    if str(self.returnReverseName) < str(other.returnReverseName): 
     return True 
    else: 
     return False 

def __gt__ (self, other): 
    '''determine if this persons name is greater than the other persons name alphabetically''' 

    if self.returnReverseName > other.returnReverseName: 
     return True 
    else: 
     return False 

def __str__(self): 
    '''return a string of the persons name and their rating in a nice format''' 

    Name1 = str(self.first) + ' ' + str(self.last) 
    return ('%-20s %10.2f' % (Name1, self.rating)) 

其中名称需要按姓氏,名字排序,但以名字姓氏顺序打印。方法__lt____gt__是打印时应该排序的方法。我至今编译列表中的代码是:

basicList.sort() 
for line in playerDict: 
    print(playerDict[line]) 

但这并不利用该列表,并且只打印由线字典线无序的方式。虽然它确实提到了方法,但它只是无法字母化名称。如何正确使用这些方法以正确的顺序打印字典?如果我需要使用播放器对象列表,我如何使用__str__方法打印后按字母顺序打印?

这段代码有许多错误和古怪,但它所做的第一件事实际上可能会导致错误的结果,__eq____gt__正在比较两个函数而不是两个名称。由于某种原因,__lt__比较了这两个函数的字符串表示形式。我不知道为什么它有不同于其他函数的行为,但它仍然是错误的(只是以不同的方式)。

我并不感到惊讶,排序的列表没有被使用 - 你永远不会使用它。

basicList.sort() # sort the list 
for line in playerDict: # that's not basicList 
    print(playerDict[line]) # still no basicList 

你的类的方法,如果修好了,可能是这样的:

def returnName(self): 
    '''return the name of the player first last''' 
    return(self.first + ' ' + self.last) 

def returnReverseName(self): 
    '''return the name of the player as last, first''' 
    return self.last, self.first 

def __eq__ (self, other): 
    '''determine if this persons name is the same as the other personsname''' 
    return self.returnReverseName() == other.returnReverseName() 

def __lt__(self,other): 
    '''determine if this persons name is less than the other persons name alphabetically''' 
    return self.returnReverseName() < other.returnReverseName() 

def __gt__ (self, other): 
    '''determine if this persons name is greater than the other persons name alphabetically''' 
    return self.returnReverseName() > other.returnReverseName() 

def __str__(self): 
    '''return a string of the persons name and their rating in a nice format''' 
    return '%-20s %10.2f' % (self.returnName(), self.rating) 

但你可能并不需要任何的。它看起来像playerDict是一个字典,其中包含的某些键附加到值为Player对象(我假设这是类名称)。只要遍历这些值,并使用指定排序关键字:

for entry in sorted(playerDict.values(), key=lambda x: x.last, x.first): 
    print(entry) 
+0

不幸的是我需要利用这本字典的排序方法,所以这就是为什么我还没有那么多省事了。在我收到的另一条建议中,我被告知创建一个列表,对列表进行排序,并使用__str__方法打印列表的信息。我只是不太确定如何获得lt和gt方法来识别列表的正确顺序 – huskies1313

+0

如果您确实想要实现这些方法,您可以如图所示执行操作,然后简单地省略'key = ... ''sort()'调用的参数。 – TigerhawkT3

+0

它的工作,非常感谢你! – huskies1313