Podział listy na grupy i sortowanie w Pythonie

0

Hej, mam listę obiektów typu:

Stage1 | 13
Stage2 | 15
Stage2 | 17
Stage1 | 20

czyli w uproszczeniu mówiąc kolumnę z id toru i jakąś wartością- chciałbym posortowac listę najpierw względem numeru toru, tj tak zeby wyniki ze stage1 były najpierw, a później w obrębie toru posortować wartość liczbową malejąco. W jaki sposób mógłbym coś takiego uzyskać? Temat dotyczy Pythona.

1

oeprator.attrgetter z kilkoma argumentami

sorted(l, key=operator.attrgetter('attribute1', 'attribute2'))
0
Spearhead napisał(a):

oeprator.attrgetter z kilkoma argumentami

sorted(l, key=operator.attrgetter('attribute1', 'attribute2'))

A jeżeli chciałbym to wykorzystać na zwykłej liście to mogę w jakiś sposób nadać 'nazwy kolumn', tak żeby w jakiś sposób mieć jakiś attribute1, 2 itd?

1

A jeżeli chciałbym to wykorzystać na zwykłej liście to mogę w jakiś sposób nadać 'nazwy kolumn', tak żeby w jakiś sposób mieć jakiś attribute1, 2 itd?

Chodzi ci o sortowanie listy list/listy krotek? Wówczas zamiast attrgetter stosujesz itemgetter podając jako parametry numery indeksów do porównywania

>>> l = [("S1", 12), ("S2", 4), ("S1", 100), ("S2", 5)]
>>> sorted(l, key=operator.itemgetter(0, 1))
[('S1', 12), ('S1', 100), ('S2', 4), ('S2', 5)]
0

Nie Napisałeś dokładnie Masz listę, jeśli obiektów, które mają (co najmniej) dwa atrybuty string (powiedzmy) stage, oraz number, to poniższe (korzystając z tego co napisał @Spearhead) zadziała.

class O: 
    stage = None 
    number = None 
    def __repr__(self): 
        return "{" + str(self.stage) + ", " + str(self.number) + "}" 

In [15]: o1 = O()                                                               

In [16]: o2 = O()                                                               

In [17]: o1.stage = "Stage1"                                                    

In [18]: o2.stage = "Stage2"                                                                                                                        

In [19]: o1.number = 13                                                         

In [20]: o2.number = 1 

In [10]: l = [o1, o2] 

In [28]: sorted(l, key=operator.attrgetter('stage')) 
   
Out[28]: [{Stage1, 13}, {Stage2, 1}]

In [29]: sorted(l, key=operator.attrgetter('number'))                           
Out[29]: [{Stage2, 1}, {Stage1, 13}]

1 użytkowników online, w tym zalogowanych: 0, gości: 1