按值排序多个Class对象的列表

时间:2016-10-10 15:24:24

标签: python-3.x

所以我花了很长时间在这上面,但我真的无处可去。

我需要对从字典中的一个键获得的多个类值的列表进行排序。 列表看起来像这样,具有可变数量的列表元素。

[<__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个索引。希望我在这里包含了所有相关信息。

1 个答案:

答案 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)) 已经是整数类型)