Speziellen String in Liste konvertieren

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

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']]
Edit: Ich hoffe Du hast jetzt nicht einfach `eval()` genommen.
OnkelHotte
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&quot']]

...etwas merkwürdig wie ich finde.
Beim ersten """ fehlt das erste Zeichen (&), beim letzten das letzte (; )... :shock:
BlackJack

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:

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']]
Du solltest auf jeden Fall den ganzen Ausdruck mal in einer Python-Shell Schritt für Schritt aufbauen und Dir die ganzen Zwischenergebnisse anschauen.
OnkelHotte
User
Beiträge: 3
Registriert: Freitag 10. Oktober 2008, 20:28

Danke!
Du hast mir sehr geholfen!
Python fetzt!
;-)
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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...
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.
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

OnkelHotte hat geschrieben:Danke!
Du hast mir sehr geholfen!
Python fetzt!
;-)
Bist Du der ps.de-OnkelHotte?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

OnkelHotte hat geschrieben:Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...
Scheinbar gefällt mir :-D
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ü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
Antworten