Hi
Ich habe das Problem, dass ich eine Liste nach dem Anfangsbuchstaben des ersten Wertes ordnen lassen möchte.
Diese Liste enthält mehrere Listen:
Hier das Beispiel
[ [ 'STRING','STRING', datetime.date(1950, 10, 10), 'STRING', datetime.date(2005, 8, 29), 'STRING', 'STRING', INT, INT, LONG, 'STRING'] , [...] ]
Wie ihr seht sind in einer großen Liste mehrere Listen mit unterschiedlichen Datentypen.
liste.sort() gibt leider einen fehler zurück, da es mit den Datumstypen nichts anfangen kann.
Wie kann ich meine Listen in der Liste trotzdem ordnen lassen? Wie gesagt, der Anfangsbuchstabe des ersten Strings soll entscheident sein.
ordnen einer gemischten liste
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Also ich versteh nicht ganz wie die Datetimes sortiert werden sollen. Gehören die zu den Strings dazu? Wenn ja pack die doch mit den Strings in einen Tuple.
vielleicht hilft dir einfach mal:
Da kannste die suchen-Funktion nach belieben ändern. Muss einfach bei item1 > item2 1 bei gleichheit 0 und bei item2 < item1 -1 zurückgeben.
Gruss
Also ich versteh nicht ganz wie die Datetimes sortiert werden sollen. Gehören die zu den Strings dazu? Wenn ja pack die doch mit den Strings in einen Tuple.
vielleicht hilft dir einfach mal:
Code: Alles auswählen
def suchen(item1,item2):
return cmp(item1[0],item[2])
liste.sort(suchen)
Gruss
hier zu verdeutlichung:
import datetime
a=[['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
>>> a
[['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
a.sort()
>>> a
[['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
das klappt im terminal wunderbar. nur leider wenn ich es in ein skript einbaue klappt dies nicht mehr.
import datetime
a=[['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
>>> a
[['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
a.sort()
>>> a
[['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
das klappt im terminal wunderbar. nur leider wenn ich es in ein skript einbaue klappt dies nicht mehr.
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Also bei mir funktioniert folgendes:
falls das nicht geht poste mal den ganzen Traceback.
oder versuche noch:
Gruss
Also bei mir funktioniert folgendes:
Code: Alles auswählen
import datetime
a=[['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
a.sort()
print a
oder versuche noch:
Code: Alles auswählen
a=[['Xaa', 'Bbb', datetime.date(1950, 10, 10), '9999', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz'], ['Scholze', 'Elfriede', datetime.date(1950, 10, 10), '0253595', datetime.date(2005, 8, 29), 'DV', '109841685344ef', 1, 0, 1L, 'pat_sturz']]
def sortieren(item1,item2):
return cmp(item1[0],item2[0])
a.sort(sortieren)
print a
Ich nehme mal stark an die Daten kommen aus 'ner Datenbank. Warum lässt Du nicht die Datenbank das Ergebnis schon sortieren?
danke @ rayo... funktioniert bestens
@ blackjack - an sich hast du recht, das wäre einfacher. nur leider würde es die dynamische zusammensetzung der befehle im quelltext erschweren da es sich immer unterschiedlich auf diverse tabellen bezieht. dafür gibt es bestimmt auch eine einfache lösung aber rayos lösung funktioniert jetzt schon
@ blackjack - an sich hast du recht, das wäre einfacher. nur leider würde es die dynamische zusammensetzung der befehle im quelltext erschweren da es sich immer unterschiedlich auf diverse tabellen bezieht. dafür gibt es bestimmt auch eine einfache lösung aber rayos lösung funktioniert jetzt schon
achso noch eine Frage Rayo.
Könntest du mir noch erklären wieso und weshalb es funktioniert? Ich steige jetzt noch nicht ganz durch, auch wenn die Funktion eigentlich mini ist
was genau ist item1 und item2 und was macht cmp() mit ihnen?
cmp gibt doch eigentlich nur 1,0 oder -1 zurück oder nicht?
Könntest du mir noch erklären wieso und weshalb es funktioniert? Ich steige jetzt noch nicht ganz durch, auch wenn die Funktion eigentlich mini ist
was genau ist item1 und item2 und was macht cmp() mit ihnen?
cmp gibt doch eigentlich nur 1,0 oder -1 zurück oder nicht?
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Also sortieren wird einfach in der sort-funktion für jedes element aufgerufen. item1 und item2 sind die 2 array elemente die verglichen werden, und da sag ich einfach er soll einfach den ersten string vergleichen (cmp).
cmp gibt wirklich nur -1,0 und 1 zurück, aber mehr brauchts ja nicht,
Eigentlich ist die sortier Funktion nur die Entscheidunshilfe wie sortiert werden soll
Gruss
Also sortieren wird einfach in der sort-funktion für jedes element aufgerufen. item1 und item2 sind die 2 array elemente die verglichen werden, und da sag ich einfach er soll einfach den ersten string vergleichen (cmp).
cmp gibt wirklich nur -1,0 und 1 zurück, aber mehr brauchts ja nicht,
Eigentlich ist die sortier Funktion nur die Entscheidunshilfe wie sortiert werden soll
Gruss