我是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)
答案 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.dumps
和map
之类的 -
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)