sortier Problem mit Dicts in einer Liste

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Montag 14. April 2008, 09:27

Hi Leute,
ich habe eine liste mit dicts und die haben einen key namens key und in dem ist eine liste...
jetzt würde ich gerne anhand der länge der liste in key die ursprungsliste sortieren....

kann man das verstehen? Hier ein Beispiel:

Code: Alles auswählen

list = []
list.append({'key': []})
list.append({'key': [1]})
list.append({'key': [1,2]})
list.append({'key': [1,2,3]})
list.append({'key': [1,2,3,4]})
list.append({'key': [1,2,3,4]})
list.append({'key': [1,2,3,6]})
list.append({'key': [1,2,4]})
#Die Liste sieht dann so aus
list
[{'key': []}, {'key': [1]}, {'key': [1, 2]}, {'key': [1, 2, 3]}, {'key': [1, 2, 3, 4]}, {'key': [1, 2, 3, 4]}, {'key': [1, 2, 3, 6]}, {'key': [1, 2, 4]}]

#Als Ergebnis hätte ich gerne sowas 
#list.sort('keine ahnung wie ich das hier angebe')
#[{'key': []}, {'key': [1]}, {'key': [1, 2]}, {'key': [1, 2, 3]}, {'key': [1, 2, 4]}, {'key': [1, 2, 3, 4]}, {'key': [1, 2, 3, 4]}, {'key': [1, 2, 3, 6]}]

#Wie man sieht ist der letzte Eintrag der Liste an die 5. Stelle gerutscht. Dabei interessiert mich nur wie lang die Listen sind, nicht der Inhalt.
Kann mir hier jemand helfen?
Zuletzt geändert von würmchen am Montag 14. April 2008, 10:37, insgesamt 2-mal geändert.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 14. April 2008, 09:33

Komischer Datenaufbau... "Key" ist doch nicht immer vom Wert key, oder? Ansonsten warum das ganze? Dann doch direkt eine Liste mit den eigentlichen Werten und nicht das ganze andere Zeug drum rum...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Montag 14. April 2008, 09:46

Naja ich hab jetzt das wort key nur als Beispiel genommen.

und key ist auch nicht vom wert key sondern hat eine liste und mich interessiert die länge der liste...

und das dict in der liste hat noch viele andere werte, zum sortieren interessiert mich aber nur ein key, wollte jetzt nur nicht meinen ganzen code unübersichtlicher machen und mich auf das etwas wichtigere begrenzen...

aber ich merke das so der sinn verloren geht :-)

Code: Alles auswählen

list = []
list.append({'key': [], 'key1': 'blablub'})
list.append({'key': [1], 'key1': 'blablub'})
list.append({'key': [1,2], 'key1': 'blablub'})
list.append({'key': [1,2,3], 'key1': 'blablub'})
list.append({'key': [1,2,3,4], 'key1': 'blablub'})
list.append({'key': [1,2,3,4], 'key1': 'blablub'})
list.append({'key': [1,2,3,6], 'key1': 'blablub'})
list.append({'key': [1,2,4], 'key1': 'blablub'})

und es sind halt normal viel mehr keys in dem jeweiligen dict.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Montag 14. April 2008, 09:51

Auch, wenn deine Datenstruktur stinkt und man `list` nicht als Variablennamen nutzen soll:

Code: Alles auswählen

list.sort(key=lambda n: len(n['key']), reverse=True)
€dit:
Ersteres nehme ich zurück ;)
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Montag 14. April 2008, 10:02

Danke trotzdem für Deine Hilfe, aber das ist nur ein Beispiel gewesen, nicht meine Original Struktur, werde mich das nächste mal bemühen bessere Variablennamen für meine Beispiele zu suchen...

Funktionieren tut es aber nicht, bekommen ein 'None' als Ergebnis

Code: Alles auswählen

print list.sort(key=lambda n: n['key'], reverse=True)
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 14. April 2008, 10:04

sort() liefert auch nichts zurück ;) Mach das print mal später...

Also so:

Code: Alles auswählen

liste = [...]
liste.sort()
print liste

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Montag 14. April 2008, 10:11

ups, ok, nehm alles zurück :-)

dachte ich muss dann das neue sortierte nem ner neuen variable zuweisen...

so war das bei perl, wo ich her komme ;-), gewesen...


Danke so funktioniert es...
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Montag 14. April 2008, 10:38

Da ich jetzt gerade versuche diese Sortierfunktion zu verstehen, wie würde das ganze aussehen, wenn ich nach zwei Keys sortieren will?

Hat jemand eine gute Anleitung für diese Sortierfunktion?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 14. April 2008, 11:09

Schau dir mal das hier an: [wiki]Sortierungs-Tutorium[/wiki]
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Montag 14. April 2008, 12:45

würmchen hat geschrieben:ups, ok, nehm alles zurück :-)

dachte ich muss dann das neue sortierte nem ner neuen variable zuweisen...

so war das bei perl, wo ich her komme ;-), gewesen...
Das geht mit der Funktion `sorted`, die erstellt eine neue Liste.
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Montag 14. April 2008, 13:50

Ja, das habe ich eben anhand des Tutoriums raus gefunden, vielen Dank
Antworten