Seite 1 von 1

sortier Problem mit Dicts in einer Liste

Verfasst: Montag 14. April 2008, 09:27
von würmchen
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?

Verfasst: Montag 14. April 2008, 09:33
von jens
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...

Verfasst: Montag 14. April 2008, 09:46
von würmchen
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.

Re: sortier Problem mit Dicts in einer Liste

Verfasst: Montag 14. April 2008, 09:51
von audax
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 ;)

Verfasst: Montag 14. April 2008, 10:02
von würmchen
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)

Verfasst: Montag 14. April 2008, 10:04
von jens
sort() liefert auch nichts zurück ;) Mach das print mal später...

Also so:

Code: Alles auswählen

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

Verfasst: Montag 14. April 2008, 10:11
von würmchen
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...

Verfasst: Montag 14. April 2008, 10:38
von würmchen
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?

Verfasst: Montag 14. April 2008, 11:09
von Rebecca
Schau dir mal das hier an: [wiki]Sortierungs-Tutorium[/wiki]

Verfasst: Montag 14. April 2008, 12:45
von audax
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.

Verfasst: Montag 14. April 2008, 13:50
von würmchen
Ja, das habe ich eben anhand des Tutoriums raus gefunden, vielen Dank