Seite 1 von 1

Sortieren einer Liste

Verfasst: Samstag 15. Dezember 2007, 13:44
von runge
Hallo Leuts,

ich hab ein Problem:

ich habe eine Liste in der folgende Werte gespeichert werden:

Code: Alles auswählen

[[Person1, 20] , [Person2, 90], [Person3, 95], [Person4, 15], [Person5, 25], [Person6, 70]]
Die Bezeichner "PersonX" sind Referenzen auf Objekte und der darauffolgende Wert gibt eine Prozentzahl an.

Diese Liste will ich nun sortieren lassen nach Prozentzahlen, sodass das rauskommt:

Code: Alles auswählen

[ [Person4, 15], [Person1, 20], [Person5, 25], [Person6, 70], [Person2, 90], [Person3, 95]]

Hier nochmal der Quelltext damit ihr es besser versteht wie das ganze überhaupt funktioniert:


http://pastebin.com/m44a3ac3f

Code: Alles auswählen

    def partnersuche(self, knoten):
        #Die Methode 'partnersuche' kriegt einen Knoten uebergeben, von dem das Wunschprofil
        #geholt wird(wunschprofil). Dieses wird ein einer tempvariable gespeichert und mit allen
        #Elementen der Listen verglichen.
        potListe = []

        potlaenge = 0
        if self.aktPos <> None:
            self.erstePosition()
            listenlaenge = self.laenge
            while listenlaenge > 0:
                print listenlaenge
                potpartner = self.holeElement()
                wunschprofil = knoten.holeWunschprofil()
                prozent = 100

                
                
                if potpartner.holeNickname() == knoten.holeNickname():
                    print "potpartner = wunschprofil"
                    self.naechstePosition()       
                
                else:              
                    
                    if wunschprofil.holeAlter() <> "beliebig" and wunschprofil.holeAlter2() <> "beliebig":
                        if wunschprofil.holeAlter() <= potpartner.holeAlter() and wunschprofil.holeAlter2() >= potpartner.holeAlter():
                            print "alter stimmt"
                            prozent = prozent - 20
                        else:
                            None
                    else:
                        print "alterbeliebig"
                        prozent = prozent - 20
                    if wunschprofil.holeGroesse() <> "beliebig":
                        if wunschprofil.holeGroesse() == potpartner.holeGroesse():
                            print "groesse stimmt"
                            prozent = prozent - 20
                        else:
                            None
                    else:
                        print "groessebeliebig"
                        prozent = prozent - 20
                    if wunschprofil.holeFigur() <> "beliebig":    
                        if wunschprofil.holeFigur() == potpartner.holeFigur():
                            print "figur stimmt"
                            prozent = prozent - 20
                        else:
                            None
                    else:
                        print "figurbeliebig"
                        prozent = prozent - 20
                    if wunschprofil.holeRaucher() <> "beliebig":
                        if wunschprofil.holeRaucher() == potpartner.holeRaucher():
                            print "raucher stimmt"
                            prozent = prozent - 20
                        else:
                            None
                    else:
                        print "raucherbeliebig"
                        prozent = prozent - 20
                    if wunschprofil.holeHobby() <> "beliebig":
                        if wunschprofil.holeHobby() == potpartner.holeHobby():
                            print "hobby stimmt"
                            prozent = prozent - 20
                        else:
                            None
                    else:
                        prozent = prozent - 20
                    if prozent <= 60:
                        potListe.append([potpartner.holeNickname(), prozent])
                        potlaenge=potlaenge+1
                        print potListe
                      
                    else:
                        pass 
                    self.naechstePosition()
                listenlaenge = listenlaenge - 1
        else:
            pass
Ich danke schonmal im Vorraus für jede kleine Hilfe :wink:

Verfasst: Samstag 15. Dezember 2007, 14:04
von schlangenbeschwörer

Code: Alles auswählen

liste.sort(key=lambda x: x[1])

Verfasst: Samstag 15. Dezember 2007, 14:05
von Trundle

Code: Alles auswählen

from operator import itemgetter

liste = [[Person1, 20] , [Person2, 90], [Person3, 95], [Person4, 15], [Person5, 25], [Person6, 70]]
sortierte_liste = sorted(liste, key=itemgetter(1))

Verfasst: Samstag 15. Dezember 2007, 14:32
von runge
Danke für die schnelle Hilfe. Funktioniert einwandfrei das sortieren, war schon fast am verzweifeln, aber jetzt läuft dat wieder :D


DANKE!