PYTHON: Listen innerhalb einer Liste nach einem bestimmten Feld sortieren

Diskutiere PYTHON: Listen innerhalb einer Liste nach einem bestimmten Feld sortieren im Ruby, php, Perl, Python ... Forum im Bereich Programmieren unter Linux/Unix; Hallo zusammen, folgendes Problem: Ich habe eine Liste in der viele Listen vorhanden sind: a = [ ['Name', 'Vorname', 'Alter'], ['Name',...

  1. KRiusd

    KRiusd Jungspund

    Dabei seit:
    25.04.2005
    Beiträge:
    23
    Zustimmungen:
    0
    Hallo zusammen,

    folgendes Problem:

    Ich habe eine Liste in der viele Listen vorhanden sind:

    Code:
    a = [ ['Name', 'Vorname', 'Alter'], ['Name', 'Vorname', 'Alter'], ... ]
    Wenn ich die Liste nach dem ersten Element sortieren will ist das ja einfach:
    Code:
    a.sort()
    Wie stelle ich es jetzt an das ich nach Vorname oder Alter sortieren kann!


    Schon mal danke

    KRiusd
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 thorus, 30.12.2005
    Zuletzt bearbeitet: 09.01.2006
    thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    sort() kann man eine Vergleichsfunktion übergeben. In deinem Fall, könnte man so schreiben:
    Code:
    lcmp = lambda idx: lambda i, j: (i[idx] < j[idx]) and -1 or \
                (i[idx] > j[idx]) and 1 or 0
    
    a.sort(cmp=lcmp(1))    # Vorname
    a.sort(cmp=lcmp(2))    # Alter
    
     
  4. #3 KRiusd, 09.01.2006
    Zuletzt bearbeitet: 09.01.2006
    KRiusd

    KRiusd Jungspund

    Dabei seit:
    25.04.2005
    Beiträge:
    23
    Zustimmungen:
    0
    Vielen Dank!

    Das hilft mir schon mal ein wenig!

    Allerdings meldet sich Python mit:
    Code:
    TypeError: sort() takes no keyword arguments
    Habe gerade festgestellt, das Python 2.3.4 (mit dem ich arbeite) noch nicht mit cmp, key und reverse umgehen kann!

    Gibt es noch eine andere Möglichkeit sort() den lcmp Befehl schmackhaft zu machen?

    Thx
     
  5. #4 thorus, 09.01.2006
    Zuletzt bearbeitet: 09.01.2006
    thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    Ok, da ein Upgrade wohl bei dir nicht hilft (btw. ich liebe Decorators in 2.4, mein Weihnachtsbaum ist voller @s vor lauterm decorieren. :D), müssen wir mal in Python 2.3 gucken:
    Code:
    >>> print [].sort.__doc__
    L.sort(cmpfunc=None) -- stable sort *IN PLACE*; cmpfunc(x, y) -> -1, 0, 1
    Während in 2.4:
    Code:
    >>> print [].sort.__doc__
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1
    Also einfach statt cmp cmpfunc angeben, oder einfach gar kein Keyword angeben weils ja sowieso das erste Argument jeweils ist.
    Sorry, war mein Fehler, das wusste ich nicht, dass es in 2.3 anders heißt.

    EDIT:
    Merke grade, dass die Funktion lcmp vielleicht etwas unübersichtlich ausschaut, man könnte sie natürlich auch so schreiben:
    Code:
    def lcmp(idx):
        def t(i, j): 
            if i[idx] < j[idx]:        # kleiner
                return -1
            elif i[idx] > j[idx]:      # größer
                return 1
            else:                      # gleich
                return 0
    
        return t
     
  6. KRiusd

    KRiusd Jungspund

    Dabei seit:
    25.04.2005
    Beiträge:
    23
    Zustimmungen:
    0
    Jetzt hats geklappt! :)

    Funktioniert einwandfrei!

    Viel Dank!
     
  7. #6 Onkel_Tom, 12.07.2006
    Onkel_Tom

    Onkel_Tom Gast

    eine erweiterte Frage

    Hallo,
    ich habe ein Problem, das in die gleiche Richtung geht, aber noch nen Schritt komplexer ist.

    Ich habe auch eine Liste, in der wiederum Listen stehen

    Code:
    b = [ ['Art', 'Variante', 'Typ', float(Dauer)], ['Art', 'Variante', 'Typ', float(Dauer)], ...]
    Ich will nun diese Liste so sortieren, dass alle Einträge, bei denen Art und Variante und Typ gleich sind untereinander stehen und nach Dauer aufsteigend sortiert sind.

    Also in etwa so:
    Code:
    print b
    >>>>
    a var1 typ2 2
    b var2 typ1 3
    a var1 typ2 1
    b var2 typ2 1
    
    soll werden zu:
    Code:
    print b.sort()
    >>>>
    a var1 typ2 1
    a var1 typ2 2
    b var2 typ1 3
    b var2 typ2 1
    
    Vielen Dank für Hilfe.
    Onkel_Tom
     
Thema: PYTHON: Listen innerhalb einer Liste nach einem bestimmten Feld sortieren
Besucher kamen mit folgenden Suchen
  1. python listen sortieren

    ,
  2. python liste sortieren

    ,
  3. python liste sortieren aufsteigend

    ,
  4. listen sortieren python,
  5. python listen in listen,
  6. python sortieren,
  7. python liste der größe nach sortieren,
  8. phyton listen sortieren,
  9. liste sortieren python,
  10. python zahlen sortieren,
  11. python listen sortieren muster,
  12. python alphabetisch sortieren,
  13. python liste alphabetisch sortieren,
  14. python daten sortieren,
  15. Python Dateien sortieren,
  16. sortieren python,
  17. python liste von listen sortieren,
  18. python liste in liste,
  19. zahlen sortieren python,
  20. pyhton listen der größe nach sortieren,
  21. python 3 listen sortieren,
  22. liste [[]] python,
  23. python liste nach datum sortieren,
  24. element in liste verschieben python,
  25. python sortieren listen
Die Seite wird geladen...

PYTHON: Listen innerhalb einer Liste nach einem bestimmten Feld sortieren - Ähnliche Themen

  1. [python] Einträge in Listen subtrahieren

    [python] Einträge in Listen subtrahieren: Hallo, ich will eine recht einfache Formel in Python umsetzen: delta T = t_(n+1) - t_(n) (Es soll die Differenz zwischen n+1-ten und n-ten Wert...
  2. Python-Interpreter PyPy 7.2 freigegeben

    Python-Interpreter PyPy 7.2 freigegeben: Der Python-Interpreter PyPy wurde in Version 7.2 veröffentlicht. Die aktuelle Version des Interpreters, der wesentlich schneller als der...
  3. Python 3.8 erschienen

    Python 3.8 erschienen: Über 15 Monate nach Python 3.7 wurde jetzt die nächste Version veröffentlicht. Python 3.8 bringt als wesentliche Erweiterung einen Operator, der...
  4. Ende von Python 2 rückt näher

    Ende von Python 2 rückt näher: Die Unterstützung für Python 2 endet am 31.12. 2019. Die Python Software Foundation hat eine Kampagne gestartet, um mehr Öffentlichkeit zu...
  5. Debian und Ubuntu planen die Entfernung von Python 2

    Debian und Ubuntu planen die Entfernung von Python 2: Debian und Ubuntu planen die Entfernung von Paketen auf der Basis von Python 2. Der Support für Python 2 endet am 31. Dezember 2019. Weiterlesen...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden