Seite 1 von 1

kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 17:56
von Lena
Hallo! Die Frage steht eig schon oben...geht das und wenn ja mit welcher Anweisung?

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 18:46
von Kebap
Lena, wie heißt eigentlich die Python Anleitung, aus der du lernst?

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 18:50
von lackschuh
python-forum.de :|

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 19:06
von MagBen

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.

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 19:08
von BlackJack
Jaaa super, `eval()`… :roll: Damit wird Lena wahrscheinlich ab sofort sehr viel ”lösen”.

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 19:13
von MagBen
Andere Leute schreiben Parser, ich benutze Python, in Python ist der Parser fest eingebaut, die Schnittstelle zum Parsen mit Python ist die Funktion eval().

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 19:30
von 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.

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 19:38
von cofi
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.

Re: kann man ein dictionary in einen String umformen?

Verfasst: Freitag 26. Juni 2015, 19:45
von MagBen
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.