按数值对对象实例进行排序Python

2024-04-24 10:02:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在抓取一个网站的某些价值,如名称,价格,股票和评级,并一直在使用这些功能

    my_products.sort(key = lambda x: x.return_name())
    my_products.sort(key = lambda x: x.return_price())
    my_products.sort(key = lambda x: x.return_rating())
    my_products.sort(key = lambda x: x.return_stock())

把它们分类。这一切都很好很好,除了它没有数字排序的价格,它列出了1000,1500,20,200,2000,2500。这不是我想要的。如何更改这种排序行为?在

每种产品的类别:

^{pr2}$

Tags: lambdakeyname功能名称return排序网站
3条回答

您可以通过使price成为一个数值而不是一个字符串来改变这种行为,该字符串将强制执行当前的词典排序。通常应为:

__price = 0
...
def __init__(self, title, price, rating, stock):
    self.__price = float(price)

因此,您可以强制用户为price传递一个数值,而不是在您的类中进行清理,方法是为作为price传递的非数字值增加ValueError。在

只需在键函数中将字符串转换为数字(例如intfloat):

my_products.sort(key = lambda x: float(x.return_price()))

也可以更新该方法,使其首先返回一个数字:

^{pr2}$

当您在类中编写它时,price是一个字符串,那么所有的价格都将像字符串一样进行比较。 您有两种选择:

  1. 将价格转换为排序函数:my_products.sort(key = lambda x: float(x.return_price()))
    请注意,您可以通过int()float()进行转换
  2. 直接将price声明为数值(并且不要更改排序语法):

    class Product():
        __title = ""
        __price = np.nan
        __rating =""
        __stock = ""
    
        def __init__(self,title, price, rating, stock):
            self.__title = title
            # -
            self.__price = price#if price is a numeric input
            #or convert to the right type if price is a string input
            self.__price = float(price)
            # -
            self.__rating = rating
            self.__stock = stock
    

在我看来,我将使用选项2来与价值观的含义保持一致。请注意,您应该根据新类型重写函数。
也许你可以对你的评级/股票做同样的事情(如果它也是数字的话)。在

编辑-字符串比较和排序
为了比较字符串,python将字符转换成它们的等价序数,然后从左到右检查int。因此'1000'比'20'低,见下文:

^{pr2}$

相关问题 更多 >