Speziellen String in Liste konvertieren
-
- User
- Beiträge: 3
- Registriert: Freitag 10. Oktober 2008, 20:28
EDIT: Die Frage bezog sich darauf, wie man einen String in eine Liste konvertiert. Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...
Zuletzt geändert von OnkelHotte am Freitag 10. Oktober 2008, 21:03, insgesamt 1-mal geändert.
Code: Alles auswählen
In [200]: s = '[["a1","a2","a3"],["b1","b2","b3"],["c1","c2","c3"]]'
In [201]: [x[1:-1].split('","') for x in s[2:-2].split('],[')]
Out[201]: [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3']]
-
- User
- Beiträge: 3
- Registriert: Freitag 10. Oktober 2008, 20:28
Danke für deine schnell Antwort.
Ich vergaß im Übrigen zu erwähnen, dass die doppelten Anführungszeichen HTML-formatiert sind. Deine Lösung hat mich schon sehr viel weiter gebracht.
Ich habe sie folgendermaßen verändert:
[x[1:-1].split('","') for x in s[2:-2].split('"],["')]
dadurch erhalte ich immerhin folgendes:
[['quot;a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3"']]
...etwas merkwürdig wie ich finde.
Beim ersten """ fehlt das erste Zeichen (&), beim letzten das letzte (; )...
Ich vergaß im Übrigen zu erwähnen, dass die doppelten Anführungszeichen HTML-formatiert sind. Deine Lösung hat mich schon sehr viel weiter gebracht.
Ich habe sie folgendermaßen verändert:
[x[1:-1].split('","') for x in s[2:-2].split('"],["')]
dadurch erhalte ich immerhin folgendes:
[['quot;a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3"']]
...etwas merkwürdig wie ich finde.
Beim ersten """ fehlt das erste Zeichen (&), beim letzten das letzte (; )...
Wenn Du das merkwürdig findest, solltest Du das Tutorial aus der Dokumentation durcharbeiten, mit speziellem Augenmerk auf "slicing" bei Zeichenketten.
Ansonsten könnte man auch als ersten Schritt die '"'s durch Anführungszeichen ersetzen:
Du solltest auf jeden Fall den ganzen Ausdruck mal in einer Python-Shell Schritt für Schritt aufbauen und Dir die ganzen Zwischenergebnisse anschauen.
Ansonsten könnte man auch als ersten Schritt die '"'s durch Anführungszeichen ersetzen:
Code: Alles auswählen
In [208]: [x[1:-1].split('","')
.....: for x in s.replace('"', '"')[2:-2].split('],[')]
Out[208]: [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3']]
-
- User
- Beiträge: 3
- Registriert: Freitag 10. Oktober 2008, 20:28
Danke!
Du hast mir sehr geholfen!
Python fetzt!
Du hast mir sehr geholfen!
Python fetzt!
Das ist doof. Ich kann durchaus nachvollziehen, daß man manchmal einen vielleicht nicht ganz so gelungenen Beitrag ungeschehen machen möchte, aber letztlich hilfst du damit niemandem weiter. Bedenke, daß vielleicht auch andere irgendwann mal diese Frage haben könnten und über die Suchfunktion auf deinen Beitrag stoßen würden. Im Moment können sie nicht mehr erkennen, daß es sich mal um "ihre" Frage (konkrete Problemstellung) gehandelt hat und müssen sie erneut stellen. Schön ist anders.OnkelHotte hat geschrieben:EDIT: Die Frage bezog sich darauf, wie man einen String in eine Liste konvertiert. Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...
-
- User
- Beiträge: 92
- Registriert: Mittwoch 10. September 2008, 22:10
- Wohnort: Hamburg
Bist Du der ps.de-OnkelHotte?OnkelHotte hat geschrieben:Danke!
Du hast mir sehr geholfen!
Python fetzt!
Übrigens: Wenn garantiert werden kann, dass in dem String `s` nichts böses steht, reicht bei dem Format doch ein `eval`, um das in eine Python-Liste von Listen mit Strings zu verwandeln.
Wenn man's nicht garantieren kann, aber Python 2.6 hat, kann das Modul `ast` mit `ast.literal_eval()` eine elegante Lösung sein.
Stefan
Wenn man's nicht garantieren kann, aber Python 2.6 hat, kann das Modul `ast` mit `ast.literal_eval()` eine elegante Lösung sein.
Stefan