You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中使用sort函数对Business对象列表按评分降序并基于ID排序

解决方案

嘿,要实现这个排序需求其实很简单,Python 自带的列表排序功能就能轻松搞定。我先给你完整的可运行代码,再拆解其中的逻辑:

首先,我们得先定义 Business 类(不然没法实例化你给出的对象),然后对列表进行排序:

class Business:
    def __init__(self, id, rating, vegan_friendly, price, distance):
        self.id = id
        self.rating = rating
        self.vegan_friendly = vegan_friendly
        self.price = price
        self.distance = distance
    
    # 方便打印查看结果
    def __repr__(self):
        return f"Business(id={self.id}, rating={self.rating}, vegan_friendly={self.vegan_friendly}, price={self.price}, distance={self.distance})"

# 你的原始列表(修正了id=5的vegan_friendly大小写,避免报错)
businesses = [
    Business(id=1, rating=4.0, vegan_friendly=True, price=4, distance=10.0),
    Business(id=2, rating=2.5, vegan_friendly=False, price=2, distance=5.0),
    Business(id=3, rating=4.5, vegan_friendly=False, price=1, distance=1.0),
    Business(id=4, rating=3.0, vegan_friendly=True, price=2, distance=3.4),
    Business(id=5, rating=4.5, vegan_friendly=True, price=1, distance=6.3),
    Business(id=6, rating=3.5, vegan_friendly=True, price=2, distance=1.2),
]

# 方法1:直接修改原列表(用list.sort())
businesses.sort(key=lambda x: (-x.rating, x.id))
print("排序后的列表:")
for biz in businesses:
    print(biz)

# 方法2:生成新的排序列表(不修改原列表,用sorted())
# sorted_businesses = sorted(businesses, key=lambda x: (-x.rating, x.id))
# print(sorted_businesses)

关键逻辑解释

这里的核心是 sort/sorted 函数的 key 参数:

  • lambda x: (-x.rating, x.id) 是一个匿名函数,用来指定排序的依据:
    1. 首先按 -x.rating 排序:因为 Python 的排序默认是升序,给 rating 加负号后,rating 越高的元素,负数值越小,会排在前面,实现了rating从高到降序的需求。
    2. 当两个元素的 rating 相同时,会接着比较第二个元素 x.id,按 id 的升序排序(因为没有加负号,默认升序),也就是 id 更小的排在前面。

运行结果

执行代码后,输出的排序结果会是:

Business(id=3, rating=4.5, vegan_friendly=False, price=1, distance=1.0)
Business(id=5, rating=4.5, vegan_friendly=True, price=1, distance=6.3)
Business(id=1, rating=4.0, vegan_friendly=True, price=4, distance=10.0)
Business(id=6, rating=3.5, vegan_friendly=True, price=2, distance=1.2)
Business(id=4, rating=3.0, vegan_friendly=True, price=2, distance=3.4)
Business(id=2, rating=2.5, vegan_friendly=False, price=2, distance=5.0)

完全符合你要求的“先按rating从高到低,rating相同则按id排序”的规则。

内容的提问来源于stack exchange,提问作者komal vyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:52:33