Am Freitag, 18. August 2006 16:12 schrieb joerg krebs:
Ich verwende die Methode:
L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)] sorted(L, key=operator.itemgetter(1)) [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
um eine Liste(L) zu sortieren.
Hat jemand eine Idee, wie man mehrstellige Zahlen sortieren als keys sortieren kann ??
Also z.B. L = [('c', 2), ('d', 10), ('a', 4), ('b', 3)
nach obiger: [('d', 10), ('c', 2), ('b', 3), ('a', 4)]
ich haette aber gerne [('c', 2), ('b', 3), ('a', 4),('d', 10)]
Um es noch mal deutlich zu sagen: Deine Problembeschreibung ist falsch. Du kriegst, was du gerne hättest:
from operator import itemgetter items = [("d", 10), ("c", 2), ("b", 3), ("a", 4)] items.sort(key=itemgetter(1)) items [('c', 2), ('b', 3), ('a', 4), ('d', 10)]
Vermutlich hast du mit Strings statt Zahlen gearbeitet als du auf das unerwartete Ergebnis der Sortierung gestoßen bist:
items = [("d", "10"), ("c", "2"), ("b", "3"), ("a", "4")] items.sort(key=itemgetter(1)) items [('d', '10'), ('c', '2'), ('b', '3'), ('a', '4')]
Um Strings numerisch zu sortieren, musst du sie in Zahlen umwandeln, z. B.:
def key(t): ... try: ... return int(t[1]) ... except ValueError: ... return t[1] ... items = [("a", "a"), ("d", "10"), ("c", "2"), ("b", "3"), ("a", "4")] items.sort(key=key) items [('c', '2'), ('b', '3'), ('a', '4'), ('d', '10'), ('a', 'a')]
[Jörg Krebs, später]
ich glaube ich habe die Antwort auf mein Frage selber gefunden: L.sort(lambda a, b: a[1]-b[1])
funktioniert zumindest fuer mehrelementige Listen von Listen, also z.B. L = [['c', 2], ['d', 10], ['a', 4], ['b', 3]] L.sort(lambda a, b: a[1]-b[1]) [['c', 2], ['b', 3], ['a', 4],['d', 10]]
Das funktioniert (bei Zahlen) auch, ist aber viel ineffizienter. Aber das hast du inzwischen bestimmt alles selber rausgekriegt... Peter _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de