kann man ein dictionary in einen String umformen?

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
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Hallo! Die Frage steht eig schon oben...geht das und wenn ja mit welcher Anweisung?
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Lena, wie heißt eigentlich die Python Anleitung, aus der du lernst?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

python-forum.de :|
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Code: Alles auswählen

# dictionary zu string
a = {"A": 1, "B": (1,2), "C": "eins-zwei-drei", (2,3): [["A"],1,2,3], "44": None}
a_str = str(a)
print( a_str) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
open("dict.txt", "w").write(a_str) 

# string zu dictionary
b_str = open("dict.txt", "r").readline()
b = eval(b_str)
print( b) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
Mit der Funktion str() kannst Du in Python (fast) alles in einen String umwandeln. Der String vom Dictionary lässt sich auch wieder in ein Dictionary umwandeln. Speicherst Du diesen String einer Datei, dann hast Du eine simple Form der Persistenz.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

Jaaa super, `eval()`… :roll: Damit wird Lena wahrscheinlich ab sofort sehr viel ”lösen”.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Andere Leute schreiben Parser, ich benutze Python, in Python ist der Parser fest eingebaut, die Schnittstelle zum Parsen mit Python ist die Funktion eval().
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

@MagBen: `eval()` ist nicht die Schnittstelle zum parsen sondern um beliebige Python-Ausdrücke *auszuwerten*, also mit Kanonen auf Spatzen geschossen und ein Sicherheitsrisiko. Es gibt wirklich kaum Anwendungsfälle für die Funktion und Datenpersistenz ganz bestimmt nicht. Es wurde Lena nun schon mehrfach JSON empfohlen, was ja auch in der Standardbibliothek abgedeckt ist, man sich also gar nichts selber schreiben braucht, und das nicht nur sicherer ist, sondern auch ein Standardformat was ausserhalb von Python gelesen und geschrieben werden kann und ja auch wird.

Selbst wenn man bei Python-Syntax für die gespeicherten Daten bleiben will ist `eval()` unnötig, denn für das sichere auswerten von Quelltext mit Python-Grunddatentypen gibt es im `ast`-Modul die `literal_eval()`-Funktion. Ich sehe aber echt keinen Grund warum man Daten in Python-Syntax speichern sollte. Das ist potentiell gefährlich und eine Sackgasse.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und jetzt mit JSON

Code: Alles auswählen

import json
# dictionary zu string
a = {"A": 1, "B": (1,2), "C": "eins-zwei-drei", (2,3): [["A"],1,2,3], "44": None}
a_str = json.dumps(a)
print(a_str) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
with open("dict.json", "w") as f:
    json.dump(a)

# string zu dictionary
with open("dict.txt", "r") as f:
    b = json.load(f)
print( b) # {'A': 1, 'C': 'eins-zwei-drei', 'B': (1, 2), (2, 3): [['A'], 1, 2, 3], '44': None}
Waaaaahnsinn. Genau so viel Code und kein Schuss ins Knie.

@Lena: Mit der Herangehensweise machst du dir keine Freunde und wie du vielleicht schon an den Antworten siehst vergeht den Leuten die Lust zu helfen. Du bist mit deinen Fragen absolut willkommen, aber wenn du Vorschlaege ignorierst und man keine Verbesserung merkt ist das demotivierend.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

cofi hat geschrieben:und kein Schuss ins Knie.
nicht ins Knie, aber:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/.../scratch/json_str.py", line 4, in <module>
    a_str = json.dumps(a)
  File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
TypeError: keys must be a string
Auch Deine Zeile 7 scheint unvollständig zu sein.
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten