我正在抓取一个网站的某些价值,如名称,价格,股票和评级,并一直在使用这些功能
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}$
您可以通过使
price
成为一个数值而不是一个字符串来改变这种行为,该字符串将强制执行当前的词典排序。通常应为:因此,您可以强制用户为price传递一个数值,而不是在您的类中进行清理,方法是为作为price传递的非数字值增加
ValueError
。在只需在键函数中将字符串转换为数字(例如
int
或float
):也可以更新该方法,使其首先返回一个数字:
^{pr2}$当您在类中编写它时,
price
是一个字符串,那么所有的价格都将像字符串一样进行比较。 您有两种选择:my_products.sort(key = lambda x: float(x.return_price()))
。请注意,您可以通过
int()
或float()
进行转换直接将price声明为数值(并且不要更改排序语法):
在我看来,我将使用选项2来与价值观的含义保持一致。请注意,您应该根据新类型重写函数。
也许你可以对你的评级/股票做同样的事情(如果它也是数字的话)。在
编辑-字符串比较和排序
^{pr2}$为了比较字符串,python将字符转换成它们的等价序数,然后从左到右检查int。因此'1000'比'20'低,见下文:
相关问题 更多 >
编程相关推荐