我在根据Python中自定义类对象的一个属性对其进行排序时遇到了一个问题.我有一个Product对象列表(如下所示自己创建了这个类),每个对象都有名称、价格和评级属性.我正试着按价格属性升序对列表进行排序.

这是我从另一个问题中找到的key=lambda x: x.price的代码

class Product:
    def __init__(self,name,price,rating):
        self.name=name
        self.price=price
        self.rating=rating

product_list = [
Product("Laptop", 900, 4.5),
Product("Headphones", 100, 4.2),
Product("Keyboard", 50, 4.8),
Product("Monitor", 350, 4.6)
]

sorted(product_list, key=lambda x: x.price)
for product in product_list:
    print(product.name, product.price, product.rating)

然而,这段代码似乎不会对列表进行排序--它仍然是按原始顺序排列的.奇怪的是,我没有收到任何错误,所以我找不到错误在哪里.

有没有人能帮我了解一下发生了什么事?我在这个上下文中错误地使用了排序函数和lambda吗?抱歉,如果这是个低级的问题.

推荐答案

问题是sorted()不是就地排序,所以您需要将结果赋给一个变量.sorted()返回一个新的列表,所以您不能只做sorted(product_list, key=lambda x: x.price),然后期望product_list被排序.

幸运的是,这是一个简单的解决办法:

product_list = sorted(product_list, key=lambda x: x.price)
for product in product_list:
    print(product.name, product.price, product.rating)

Python相关问答推荐

使文本输入中的文本与标签中的文本相同

在上下文管理器中更改异常类型

如果索引不存在,pandas系列将通过索引获取值,并填充值

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

如何将ctyles.POINTER(ctyles.c_float)转换为int?

试图找到Python方法来部分填充numpy数组

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

Pandas 都是(),但有一个门槛

如何获取numpy数组的特定索引值?

创建可序列化数据模型的最佳方法

Scrapy和Great Expectations(great_expectations)—不合作

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

提取相关行的最快方法—pandas

合并帧,但不按合并键排序

如何使regex代码只适用于空的目标单元格

重置PD帧中的值

如何在海上配对图中使某些标记周围的黑色边框

Discord.py -

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

对于标准的原始类型注释,从键入`和`从www.example.com `?