所以我花了很长时间在这上面,但我真的无处可去。
我需要对从字典中的一个键获得的多个类值的列表进行排序。 列表看起来像这样,具有可变数量的列表元素。
[<__main__.OrderRecord object at 0x02D357D0>, <__main__.OrderRecord object at 0x02D35850>]
每个类对象中的元素都包含在:
中class OrderRecord:
"""The OrderRecord class
Data attributes: date of type str
location of type str
name of type str
colour of type str
ordernum of type int
cost of type int
"""
def __init__(self, file_line):
"""Takes a given file line and initialises an OrderRecord instance"""
split_file = file_line.split(",")
self.date = split_file[0]
self.location = split_file[1]
self.name = split_file[2]
self.colour = split_file[3]
self.ordernum = split_file[4]
self.costs = self.cost_of_order()
所以我试图通过提升“ordernum”(例如低数字首先)来获取要对类对象进行排序的类对象列表。它是类对象中的第4个索引。希望我在这里包含了所有相关信息。
答案 0 :(得分:2)
假设您有OrderRecord
个名为the_list
的元素列表。
您可以使用以下方式对其进行排序:
the_list.sort(key=lambda e : int(e.ordernum))
如果按原样使用类,则必须将排序键转换为整数,或者必须在构造函数中执行此操作:
self.ordernum = int(split_file[4])
在这种情况下,您可以直接排序:
the_list.sort(key=lambda e : e.ordernum)
不转换为整数可能导致错误的假设,它会起作用,但它会按字母顺序排序 ,因此125
将在13
之前,这不是你想要的。
注意:如果2个对象共享相同的ordernum
并且您想要添加第二个标准(或更多...),那么您可以这样做更少(使用{返回元组作为排序键,使用{ {1}}为你创建元组):
attrgetter
(现在假设the_list.sort(key=lambda e : e.attrgetter(ordernum,name))
已经是整数类型)