如何根据Python中多个对象值对类实例(对象)列表进行排序

时间:2015-07-19 01:39:40

标签: python

我是Python新手。我有一个对象列表,每个对象是一个类的实例,每个对象有5个值。我需要根据两个值对列表进行排序。即名字和姓氏。我怎样才能做到这一点?或者有更好的方法来实现我的目标吗?

还有一种方法可以在排序后以json格式列出此列表的所有对象吗?

class Format1():
    def __init__(self, alist):
        self.color = alist[3]
        self.firstname = alist[1]
        self.lastname = alist[0]
        self.phonenumber = alist[2]
        self.zipcode = alist[4] 

obj = Format1(alist)
entries.append(obj)

4 个答案:

答案 0 :(得分:0)

sorted = sorted(alist, key=lambda x: (x['firstname'], x['lastname']))

答案 1 :(得分:0)

对于排序,您可以将sorted()函数与key参数一起使用为 -

sortedlist = sorted(alist, key=lambda x: (x.firstname , x.lastname))

另外,如果用json格式,你的意思是 -

{'color':'<colorname>', 'firstname','<firstname>' ....}

每个对象的这样一个字典。然后,您可以创建一个返回对象的__dict__属性的函数,并使用json.dumpsmap之类的 -

def cdict(a):
    return a.__dict__

s = json.dumps(list(map(cdict,<your list>)))
print(s)

答案 2 :(得分:0)

如果您想使用Kremlan的答案,请将以下内容添加到您的班级:

    def __getitem__(self, option):
        return {"color": self.color,
                "firstname": self.firstname,
                "lastname": self.lastname
                "phonenumber": self.phonenumber
                "zipcode": self.zipcode
        }.get(option.lower(), None)

答案 3 :(得分:0)

我喜欢使用operator.attrgetter来使事情更具描述性/可读性

import operator
last_then_first = operator.attrgetter('lastname', 'firstname')
entries.sort(key = last_then_first)