HOWTO · Python
Konvertieren Sie ein Dictionary in einen String in Python
Dieses Tutorial zeigt, wie man in Python ein Dictionary in einen String umwandelt und umgekehrt
Auf dieser Seite
Ein Dictionary lässt sich für die Anzeige, Protokollierung oder den Datenaustausch in einen String umwandeln. Für diese Zwecke werden jedoch unterschiedliche Formate benötigt. str() liefert eine Python-Repräsentation, json.dumps() erzeugt JSON-Text für den Datenaustausch, pprint.pformat() sorgt für eine lesbare Formatierung, und mit einer Schleife können Sie ein eigenes Anzeigeformat festlegen. Alle Ergebnisse sind Strings, doch sie bewahren nicht dieselben Typen und bieten nicht alle die Möglichkeit, das ursprüngliche Dictionary wiederherzustellen.
Die passende Methode zum Umwandeln eines Dictionarys in einen String wählen
Verwenden Sie str() für eine schnelle, Python-orientierte Darstellung, zum Beispiel in einer Debugging-Meldung. Nutzen Sie json.dumps(), wenn ein anderes System JSON erwartet und Ihre Werte zu den unterstützten JSON-Typen gehören. Mit pprint.pformat() lassen sich verschachtelte Python-Daten leichter prüfen. Erstellen Sie einen eigenen String, wenn die Ausgabe ein bestimmtes Layout haben soll, etwa name: Alice, score: 9.
Diese Formate sind nicht als Serialisierungsverfahren austauschbar. Ein eigener Anzeigestring und das Ergebnis von str() können mehrdeutig sein oder sich nicht zum Einlesen durch ein anderes Programm eignen. JSON unterstützt Objekte, Arrays, Strings, Zahlen, boolesche Werte und null. Python-spezifische Werte wie Tupel oder Mengen müssen umgewandelt werden; andernfalls ist ein anderes Verfahren nötig. Auch Pickle wandelt kein Dictionary in einen String um: Die Serialisierung erzeugt Bytes. Das Laden von Pickle-Daten aus einer nicht vertrauenswürdigen Quelle kann schädlichen Code ausführen.
str() für eine Python-Repräsentation verwenden
str(dictionary) ist die kompakte Wahl, wenn eine lesbare Python-Repräsentation ausreicht. Sie enthält die geschweiften Klammern des Dictionarys und Python-typische Darstellungen seiner Schlüssel und Werte. Die genaue Formatierung ist für Python gedacht und nicht als sprachübergreifende Datenschnittstelle. Python verwendet beispielsweise True und None, JSON dagegen true und null.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
details = {"name": "Ada", "active": True}
text = str(details)
print(type(text).__name__)
print(text)
str
{'name': 'Ada', 'active': True}
Weisen Sie das Dictionary keiner Variablen namens dict zu, denn dadurch wird der eingebaute Python-Typ überschattet. Bedenken Sie außerdem, dass die Umwandlung eines Objekts in Text den Text nicht automatisch umkehrbar macht.
Ein Dictionary mit json.dumps() als JSON serialisieren
Für einen standardisierten String zum Datenaustausch verwenden Sie json.dumps(). Die passende Funktion json.loads() liest JSON-Text wieder als Python-Werte ein. Beim JSON-Roundtrip bleiben JSON-kompatible Daten erhalten, aber nicht alle Python-Typen: Tupel werden zu Arrays und beim Einlesen zu Listen; auch Dictionary-Schlüssel müssen zu den unterstützten JSON-Schlüsseltypen gehören. Standardmäßig werden Nicht-ASCII-Zeichen maskiert. Setzen Sie ensure_ascii=False, wenn sie direkt ausgegeben werden sollen. Mit indent wird der JSON-Text leichter lesbar; sort_keys=True sorgt bei Bedarf für eine stabile Reihenfolge der Schlüssel.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import json
record = {"name": "Ada", "score": 9}
text = json.dumps(record)
restored = json.loads(text)
print(text)
print(restored == record)
{"name": "Ada", "score": 9}
True
Der von json.dumps() zurückgegebene Wert ist ein String. Enthält ein Dictionary Werte, die JSON nicht kodieren kann, legen Sie eine geeignete Umwandlung fest oder wählen Sie ein Format, das für diese Daten ausgelegt ist. Gehen Sie nicht davon aus, dass JSON jedes Python-Objekt unterstützt.
Ein Dictionary mit pprint.pformat() lesbar formatieren
Verwenden Sie pprint.pformat(), wenn Sie einen formatierten String benötigen, statt direkt in die Konsole zu schreiben. Die Funktion eignet sich für verschachtelte Daten, weil sie lange Strukturen auf mehrere Zeilen verteilen kann. Das Ergebnis bleibt eine Python-orientierte Darstellung und ist kein JSON. Über Optionen können Sie Breite, Einrückung, Tiefe und Kompaktheit anpassen. Eine Tiefenbegrenzung kürzt verschachtelte Inhalte, sodass die formatierte Ausgabe möglicherweise nicht alle Werte zeigt.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pprint
record = {"user": {"name": "Ada", "roles": ["author", "editor"]}}
text = pprint.pformat(record, sort_dicts=False)
print(type(text).__name__)
print(text)
str
{'user': {'name': 'Ada', 'roles': ['author', 'editor']}}
Den zurückgegebenen String können Sie beispielsweise in einer Protokollmeldung verwenden. Im Gegensatz dazu schreibt pprint.pprint() den formatierten Text in einen Ausgabestrom. Das ist praktisch, wenn Sie die Ausgabe direkt anzeigen möchten, statt das Ergebnis in einer Variablen zu speichern.
Mit einer Schleife einen eigenen String erstellen
Ein eigenes Format gibt Ihnen Kontrolle über Trennzeichen und Bezeichnungen. Eine Listenkomprehension mit str.join() vermeidet wiederholte String-Verkettungen und lässt das abschließende Trennzeichen einfach weg. Wenn ein anderes Programm das Ergebnis einlesen soll, legen Sie fest, wie Werte behandelt werden, die das gewählte Trennzeichen enthalten können. Ein einfaches Anzeigeformat definiert nicht automatisch Regeln zum Maskieren solcher Zeichen.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
scores = {"Ada": 9, "Lin": 8}
text = ", ".join(f"{name}: {score}" for name, score in scores.items())
print(text)
Ada: 9, Lin: 8
Dieses Format eignet sich für eine Zeile, die Menschen lesen sollen. Wenn das Ergebnis ausgetauscht oder gespeichert und später eingelesen werden muss, verwenden Sie stattdessen JSON oder definieren und implementieren Sie ein Format mit klaren Regeln für Anführungszeichen und Maskierung.
Einen String wieder in ein Dictionary umwandeln
Mit json.loads() lesen Sie einen JSON-String ein. Die Funktion akzeptiert JSON-Syntax, aber keine beliebige Python-Ausgabe von str(). Für einen Python-Literalstring, den Sie kontrollieren, kann ast.literal_eval() unterstützte Literalstrukturen einschließlich eines Dictionarys einlesen, ohne beliebige Python-Ausdrücke auszuwerten. Die Funktion ist kein allgemeiner Parser und eignet sich nicht für nicht vertrauenswürdige, sehr große oder ressourcenintensive Eingaben. Prüfen Sie, ob Typ und Inhalt des Ergebnisses zu Ihrer Anwendung passen.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import ast
import json
json_text = '{"name": "Ada", "score": 9}'
python_text = "{'name': 'Ada', 'score': 9}"
print(json.loads(json_text))
print(ast.literal_eval(python_text))
{'name': 'Ada', 'score': 9}
{'name': 'Ada', 'score': 9}
Wählen Sie den Parser passend zu dem Format, mit dem der String erzeugt wurde. Keiner der beiden Parser kann ein Dictionary zuverlässig aus einem beliebigen Anzeigestring rekonstruieren, sofern für dieses Format kein passender Parser mit eindeutig definierten Regeln existiert.