首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对具有多个属性的类进行排序?

问如何对具有多个属性的类进行排序?
EN

Stack Overflow用户
提问于 2022-11-22 16:07:06
回答 1查看 33关注 0票数 0

假设我有一个名为Fish的类。现在,我要求用户输入鱼的名称和大小。现在,如何按照大小属性(按递减顺序)和名称属性(按字母顺序)对这些输入值进行排序?

代码语言:javascript
复制
class Fish:
   def __init__(self, size, name):
        self.size:int = int(size)
        self.name:str = name
        pass

def main():
   t = input()

例如,用户输入以下内容:

代码语言:javascript
复制
d 3
a 1
c 2 
b 1

排序之后,应该是:(它首先按大小排序,如果大小相同,则按名称排序)

代码语言:javascript
复制
d 3
c 2
a 1
b 1
EN

回答 1

Stack Overflow用户

发布于 2022-11-22 16:24:10

为了重写或声明对象的排序,应重写比较运算符。您需要指定一个(=,!=)和一个(>,<)。

代码语言:javascript
复制
class Fish:
   def __init__(self, size, name):
        self.size = int(size)
        self.name = name

   def __eq__(self,other):
        return self.size == other.size and self.name==other.name

   def __gt__(self,other):
        if self.size != other.size:
            return self.size > other.size
        else:
            return self.name < other.name

一个例子

代码语言:javascript
复制
f1 = Fish(1,"a")
f2 = Fish(3,'d')
f3 = Fish(2,'c')
f4 = Fish(1,'b')
fishes = [f1,f2,f3,f4]
for fish in sorted(fishes, reverse = True):
    print(fish.name, fish.size)

输出:

代码语言:javascript
复制
d 3
c 2
a 1
b 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74535681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档