dict hübsch ausgeben

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
MoonKid
User
Beiträge: 105
Registriert: Mittwoch 10. Dezember 2014, 16:24

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.
BlackJack

@MoonKid: Den letzten Absatz verstehe ich nicht‽

Für Listen, Tupel, und Wörterbücher gibt es das `pprint`-Modul in der Standardbibliothek.
MoonKid
User
Beiträge: 105
Registriert: Mittwoch 10. Dezember 2014, 16:24

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.
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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
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. :-)
MoonKid
User
Beiträge: 105
Registriert: Mittwoch 10. Dezember 2014, 16:24

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.
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. :roll: Wenigstens bis zum zweiten Abschnitt „Introduction and Quickstart” (der erste erklärt die Installation).
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

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)
Atomkraftwerkaktienbesitzer
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.
Antworten