Folgen

Ich würde meine Liste gerne erst nach der verwendeten Mastodon Version und dann nach der Anzahl der User sortieren.
Ich verstehe aber nicht, wie man in Python nach mehreren Variablen sortiert, kann mir da vielleicht jemand helfen?

sorted_result = OrderedDict(sorted(result.items(), key=lambda instance: instance[1]["str_version"], reverse=True))

Hier steht das Programm
codeberg.org/favstarmafia/Mast

@Hamiller

das habe ich auch schon gefunden, aber

sorted_result = OrderedDict(sorted(result.items(), key=lambda instance: (instance[1]["str_version"],instance[2]["user_count"]), reverse=True))

erzeugt ndexError: tuple index out of range

@favstarmafia
Wieviele Einträge hat das "instance" tuple? Sollte es vielleicht 0 und 1 statt 1 und 2 sein?
@Hamiller

@allo

wenn man mit einer Variablen sortiert, dann funktioniert es mit 1, deshalb habe ich es mit 1 und 2 versucht.

@Hamiller

@allo

das Programm steht unter dem Link, ich vermute ja eigentlich, dass ich einfach nur einen Syntax Fehler gemacht habe.

@Hamiller

@allo

mit 0 und 1 kommt der Fehler

TypeError: string indices must be integers

@Hamiller

@favstarmafia
Das ist jetzt nur rumgerate. Du musst dir ansehen was in results.items() drinsteht und ob das zu dem passt worauf du zugreifst (nämlich 2. und 3. Teil jedes Listeneintrags)

Füg mal dem Script davor hinzu:

from pprint import pprint
pprint(result.items())

Dann solltest du eine Liste ausgegeben bekommen die vielleicht so aussieht:

[("0a", "1a", "2a"), ("0b", "1b", "2c")]

dort würde dein instances[1] und instance[2] dann auf "1a", "2a" und "1b", "2b" zugreifen.

@Hamiller

@favstarmafia

Es ist immer gut sich die Daten einmal anzusehen um zu verstehen wie man auf sie zugreifen muss um das richtige zu bekommen. Durch Ausgaben von Beispieldaten kommt man oft schneller ans Ziel als wenn man es komplett theoretisch versucht.

@allo genau so habe ich es gemacht, erst dann habe ich die Struktur verstanden die sortiert wird.

Jetzt muss ich nur noch 3.1.2"+glitch" aus der Version entfernen, dann wäre die Sortierung so wie ich sie wollte.

Aktuell stehen alle glitch Instanzen ganz oben, weil das ja ein String ist.

Das bekomme ich aber auch noch hin.

fediverse.blog/~/DonsBlog/deut

@favstarmafia Du schlägst dich super dich da einzuarbeiten.

@favstarmafia Wo du beim sortieren auch aufpassen musst ist, dass auch 3.10.103 eine gültige Version sein kann, die aber ohne führende Nullen alphabetisch falsch einsortiert würde.

Ich weiß aber nicht, ob Mastodon schon solche Versionsnummern hatte.

@allo ich hoffe nicht, sonst müsste ich zwischen den Punkten mit 0en auffüllen, aber was solls, hätte ich gleich wieder was zum lernen 😎

@favstarmafia
Meine Ansatzpunkte wären da:
"1.22".split(".") gibt ["1", "22"]
und int("22") gibt 22 als Zahl.
Dann noch mal überlegen wie man das "+glitch" weg bekommt.

@allo Python kenne ich noch nicht so gut, in anderen Sprachen kann man in Strings nach Zeichenfolgen suchen und diese dann ersetzen, in diesem Fall würde man "+glitch" durch "" ersetzen, bevor man das split macht.

@allo das war einfach

str_version = data["version"].replace("+glitch", "")

@allo @Hamiller

ich habe es jetzt hinbekommen, ich muss bei beiden Variablen aus der Liste den gleichen Index verwenden.

# Sort the result by str_version und num_users
sorted_result = OrderedDict(sorted(result.items(), key=lambda instance: (instance[1]["str_version"], instance[1]["num_users"]), reverse=True))

Melde dich an, um an der Konversation teilzuhaben
social.anoxinon.de - Mastodon

Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!).