Hallo Leute, vielleicht kann mir jemand von euch helfen. 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)] Vielen Dank schon mal mfg Joerg _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
joerg krebs schrieb:
Hallo Leute, vielleicht kann mir jemand von euch helfen.
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)]
Bei mir kommt das auch so rum wie du es willst - was auch nicht verwunderlich ist, da du ja die tupel nach dem zweiten (0-based also 1) Element sortierst. Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Freitag, den 18.08.2006, 16:12 +0200 schrieb joerg krebs:
Hallo Leute, vielleicht kann mir jemand von euch helfen.
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)]
Vielen Dank schon mal
mfg Joerg
Hmm.... 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]] Mfg Joerg
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
joerg krebs schrieb:
Am Freitag, den 18.08.2006, 16:12 +0200 schrieb joerg krebs:
Hallo Leute, vielleicht kann mir jemand von euch helfen.
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)]
Vielen Dank schon mal
mfg Joerg
sort(L, key=lambda a,b: a[1]<b[1]) G Uwe _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
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
participants (4)
-
Diez B. Roggisch
-
joerg krebs
-
Peter Otten
-
Uwe Schmitt