Seite 1 von 1
dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 01:11
von MoonKid
Komplexe Datenstrukturen wie dict, list, tuple, etc sehen immer schwer lesbar aus, wenn ich sie mit str() bzw. repr() ausgeben lasse.
Gibt es irgendeine Python-Option, mit der man das "hübscher" und lesbarer machen kann?
z.B. den key in den dicts farbig. ein key pro zeile. einrückungen bei verschachtelten dicts, list, etc...
Bitte kein Python-Code. Mit code kann ich das auch - z.B. __str__()
Aber genau das möchte ich vermeiden. Der Interpreter soll das von sich aus "humanreadable" machen.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 01:35
von BlackJack
@MoonKid: Den letzten Absatz verstehe ich nicht‽
Für Listen, Tupel, und Wörterbücher gibt es das `pprint`-Modul in der Standardbibliothek.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 02:21
von MoonKid
Ist doch schon mal ein netter Anfang. Aber colors fehlen noch und der PrettyPrinter ist mir einfach zu unselbstständig. Mit width und indent möchte ich micht nicht beschäftigen müssen. Das sollte er selbstständig je nach Datenstruktur machen.
Also kann man meine Frage mit "nein" beantworten.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 02:44
von BlackJack
@MoonKid: Ich glaube `PrettyPrinter` habe ich noch nie benutzt, immer nur die `pprint()`-Funktion. Aber selbst beim `PrettyPrinter` sind `width` und `indent` optionale Angaben.
Farbe ist halt cross-plattform nicht so einfach.
Ansonsten kannst Du ja mal schauen ob Du etwas ausserhalb der Standardbibliothek findest.
Oder es halt selber implementieren wenn Du so etwas brauchst.
Wenn mir verschachtelte Strukturen selbst mit `pprint()` zu unübersichtlich werden, dann ist das für mich ein Zeichen dass ich eigene Datentypen brauche, denn Funktionen die auf so etwas operieren sind dann auch nicht mehr wirklich verständlich. Und das werden sie auch nicht durch eine hübschere farbige Darstellung der Datenstruktur.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 10:18
von DasIch
Man könnte pygments nutzen um die Ausgabe von pprint zu highlighten. Zumindest pygmentize (Script das mit Pygments kommt) kann auch platformunabhängig farbige Ausgabe in ein Terminal machen.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 10:22
von BlackJack
Wobei das ohne zusätzlichen Code nicht ganz den Anforderungen entspricht zum Beispiel die Schlüssel andersfarbig darzustellen als die Werte in einem Wörterbuch. Das geht mit den mitgelieferten Lexern ja ”nur” nach den Typen der Daten und nicht nach Schlüssel oder Wert.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 10:46
von DasIch
Da hast du recht, es wäre allerdings schonmal wesentlich hübscher und lesbarer. Vom ersten Post hatte ich den Eindruck dass dies vielleicht schon reichen könnte. Wenn man die Darstellung wirklich exakt so haben möchte, braucht man ohnehin zusätzlichen Code und Pygments wäre mMn immernoch ein Schritt in die richtige Richtung.
Re: dict hübsch ausgeben
Verfasst: Samstag 11. April 2015, 12:21
von BlackJack
@DasIch: Jup, Pygments würde ich dafür auch nehmen, wenn selbst etwas machen in Frage kommt. Ich erwähnte das nur weil die Anforderungen von MoonKid ja ziemlich strikt auf ein Import und einen Aufruf und nix weiter eingeschränkt zu sein scheinen.

Re: dict hübsch ausgeben
Verfasst: Sonntag 12. April 2015, 02:25
von MoonKid
Ok, hab pygments installiert, aber werd nicht schlau daraus, wie ich damit z.B. ein dict() "hübsch" ausgeben könnte.
help() spuckt drei Funktionen im pygments modul aus, die nichtssagende Parameter verwenden. Weiß also mangels Doku nicht, womit ich diese Funktionen füttern sollte.
Re: dict hübsch ausgeben
Verfasst: Sonntag 12. April 2015, 09:43
von BlackJack
@MoonKid: Wir hatten doch schon festgestellt das Deine Frage mit ”Nein” beantwortet werden muss. Es gibt nichts wofür man keinen Finger rühren und tatsächlich ein bisschen Arbeit reinstecken muss. Zum Beispiel die Pygments-Dokumentation lesen.

Wenigstens bis zum zweiten Abschnitt „Introduction and Quickstart” (der erste erklärt die Installation).
Re: dict hübsch ausgeben
Verfasst: Sonntag 12. April 2015, 16:15
von Ene Uran
Allerdings ohne Farbe ...
Code: Alles auswählen
import json
pfolio_dict = {
'GOOG': ('Google', 200, 549.85), 'YHOO': ('Yahoo', 900, 16.81),
'AAPL': ('Apple', 400, 188.0), 'MSFT': ('Microsoft', 300, 26.5)
}
s = json.dumps(pfolio_dict, sort_keys=True, indent=2)
print(s)
Re: dict hübsch ausgeben
Verfasst: Montag 13. April 2015, 10:41
von BlackJack
@Ene Uran: Also ähnlich wie `pprint()`, nur das man Probleme mit Werten bekommt die sich nicht ohne weiteres nach JSON umwandeln lassen und das die Ausgabe mehr Zeilen benötigt weil `json` grundsätzlich nach jedem Objekt eine neue Zeile anfängt.