2015-07-19 72 views
0

我是Python新手。我有一個對象列表,每個對象是一個類的實例,每個對象有5個值。我需要根據兩個值對列表進行排序。即名和姓。我怎樣才能做到這一點?還是有更好的方法來實現我正在做的事情?如何基於Python中的對象的多個值對一系列類實例(對象)進行排序

還有沒有辦法在排序後以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) 
+1

你可以顯示你的代碼嗎? –

+0

OBJ =格式1(ALIST) entries.append(OBJ) 類格式1(): \t DEF __init __(個體,ALIST): \t \t self.color = ALIST [3] \t \t self.firstname = ALIST [1] \t \t self.lastname = ALIST [0] \t \t self.phonenumber = ALIST [2] \t \t self.zipcode = ALIST [4] 所以我創建使用上述類的多個對象和添加對象列表。 – redAlert

+0

你可以請[編輯]你的問題,包括代碼? – NightShadeQueen

回答

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) 
0
sorted = sorted(alist, key=lambda x: (x['firstname'], x['lastname'])) 
+0

你假設他已經實現了__getitem__方法。他沒有將這些數據存儲在json中,所以這段代碼在代碼方面不適合他目前的工作。 – blasko

+0

是的。使用上述方法獲取__getitem__錯誤 – redAlert

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) 
0

我喜歡使用operator.attrgetter使事情變得更具描述性/可讀性

import operator 
last_then_first = operator.attrgetter('lastname', 'firstname') 
entries.sort(key = last_then_first) 
相關問題