2014-03-31 39 views
0

我需要通過局部變量對python對象列表進行排序。基於本地可變的排序Python對象列表

例如,我有一個類項目的對象列表;

class item(): 
    nummber1 = random.randInt(0, 100) 
    nummber2 = random.randInt(0, 100) 

listOfObjects = [] 
for i in range(0, 20) 
    listOfObjects.append(item()) 

不過,現在我有我名單需要根據該NUMBER1局部變量對它進行排序...

我曾嘗試:

listOfObjects = listOfObjects.sort() 

然而,這並不縫排序由number1或number2局部變量...我實際上不知道列表正在排序...

任何人都可以指出我在正確的方向嗎?

回答

2

可以使用key功能,像這樣:

listOfObjects = sorted(listOfObjects, key=lambda item: item.number1) 
+0

這是行不通的。這會根據它們的'number1'屬性的值對許多不同的'item'對象進行排序。我們正在討論如何通過'item'類中的'numberN'對'number1'進行排序。 –

+0

然後生成一個元組! key = lambda item:item.number1,item.number2,... item.numberN。元組支持逐項比較 –

+0

也許我誤解了OP的問題。這是一個非常令人困惑的課:P –

1

你可以這樣做:

listOfObjects.sort(key=lambda x: x.number1) 

.sort將返回None,將在地方排序

0

有幾個小問題在你的代碼中。但是,您的問題的答案是,您可以使用sorted,您可以使用該鍵來提供用於比較列表中項目的密鑰。

import random 

class item(): 
    def __init__(self): 
     self.number1 = random.randint(0, 100) 
     self.number2 = random.randint(0, 100) 

    def __repr__(self): 
     return "[" + str(self.number1) + ", " + str(self.number2) + "]" 

def __str__(self): 
     return self.__repr__() 

listOfObjects = [] 
for i in range(0, 20): 
    listOfObjects.append(item()) 

def getKey(item): 
    return item.number1 

print(sorted(listOfObjects, key=getKey)) 

輸出示例:

 
[[3, 18], [12, 11], [12, 17], [25, 41], [32, 48], [37, 1], [44, 85], [49, 39], [53, 11], [63, 57], [67, 0], [69, 34], [70, 23], [78, 25], [78, 17], [80, 87], [85, 70], [87, 29], [95, 28], [96, 44]]