Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hallo nochmal,
das Thema hört sich simpel an, aber ich kriegs nicht hin, jedenfalls nicht halbwegs vernünftig: Die folgende Liste soll also nach dem wert von c sortiert werden:
import random
class test:
def __init__(self, number):
self.a = 'abc'
self.b = 'xyz'
self.c = number
my = []
for i in range(0,10):
my.append(test(random.random()))
my_sorted = my.sort()
for i in my:
print i.c
Ich nehme mal an dass ich da dem sort ein key= mitgeben muss, aber welche funktion liefert mir jetzt da c zurück?
Entweder gibst Du als `key`-Funktion `operator.itemgetter('c')` mit, oder falls das Attribut die "natürliche" Ordnung der `test`-Objekte darstellt, implementierst Du `test.__cmp__()` entsprechend:
import random
class Test:
def __init__(self, number):
self.a = 'abc'
self.b = 'xyz'
self.c = number
def __cmp__(self, other):
if isinstance(other, Test):
return cmp(self.c, other.c)
return NotImplemented
my = []
for i in range(0,10):
my.append(test(random.random()))
my.sort()
for i in my:
print i.c
Hm, das mit dem operator.attrgetter('c') scheint mir doch am einfachsten zu sein: Hat das denn irgendwelche Nachteile gegenüber einer selbst geschriebenen cmp-funktion? Bzw. was bedeutet 'natürliche Ordnung'?
import random
class numbers:
def __init__(self, number):
self.num1 = 3.14
self.num2 = number
class test:
def __init__(self, number):
self.a = 'abc'
self.b = 'xyz'
self.c = numbers(number)
my = []
for i in range(0,10):
my.append(test(random.random()))
my = my.sort(key=lambda t: t.c.num2)
for i in my:
print i.c.num2