String to dict

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
Ben_Gunn
User
Beiträge: 2
Registriert: Freitag 2. April 2010, 17:01

Hallo an alle!

Ich bin gerade dabei einwenig Python zu lernen und stehe vor einem kleinen Problem:
Ich versuche seit geraumer Zeit einen String in ein Dict Objekt zu bekommen.

Ich bin bereits im Internet auf Lösungen gestoßen welche allerdings davon ausgehen,
dass 2 Delimiter im String existieren.

Bei mir sieht es folgendermaßen aus:

Code: Alles auswählen

my_string = "\\test1\\server\\test2\\response\\test3\\3"
In ein dict umgewandelt sollte soetwas rauskommen:

Code: Alles auswählen

{test1: 'server', test2: 'response', test3: '3'}
Ungerade Indexe sind also die Schlüssel, gerade sind die Werte.

Wie könnte man das anstellen?

Vielen Dank & LG
lunar

Code: Alles auswählen

>>> my_string = "\\test1\\server\\test2\\response\\test3\\3"
>>> parts = my_string.split('\\')
>>> dict(zip(parts[1::2], parts[2::2]))
{'test1': 'server', 'test2': 'response', 'test3': '3'}
Geht möglicherweise noch eleganter.
Ben_Gunn
User
Beiträge: 2
Registriert: Freitag 2. April 2010, 17:01

Super. Danke sehr.
So einfach geht das :)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

lunar: meine Version sieht anders aus, aber dafür noch uneleganter:

Code: Alles auswählen

>>> my_string = "\\test1\\server\\test2\\response\\test3\\3"
>>> splitted_string = filter(bool, my_string.split('\\'))
>>> dict(zip(splitted_string, splitted_string[1:])[::2])
{'test1': 'server', 'test3': '3', 'test2': 'response'}
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Was bringt das @derdon:

Code: Alles auswählen

filter(bool, my_string.split('\\'))
Also der filter, was soll der bezwecken?

Gruß
Grüßle.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Chrisber hat geschrieben:Was bringt das @derdon:

Code: Alles auswählen

filter(bool, my_string.split('\\'))
Also der filter, was soll der bezwecken?

Gruß

Code: Alles auswählen

>>> splitted_string
['test1', 'server', 'test2', 'response', 'test3', '3']
>>> my_string.split('\\')
['', 'test1', 'server', 'test2', 'response', 'test3', '3']
>>>
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
fabi1511
User
Beiträge: 23
Registriert: Donnerstag 25. Juni 2009, 18:59

ich hätts jetzt ganz spontan über LC versucht:

Code: Alles auswählen

my_list=my_string.split("\\")
my_dict=dict([(my_list[2*i],my_list[2*i+1]) for i in xrange(len(my_list)//2)])
ein filter könnte man da natürlich auch einbauen...
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

das hier wäre vllt. noch ganz nett zu lesen...

Code: Alles auswählen

parts = "\\test1\\server\\test2\\response\\test3\\3".split("\\")
dict((parts[i], parts[i+1]) for i in xrange(1, len(parts), 2))
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Code: Alles auswählen

>>> my_string = "\\test1\\server\\test2\\response\\test3\\3"
>>> elems = my_string.lstrip('\\').split('\\')
>>> dict(zip(*[iter(elems)] * 2))
{'test1': 'server', 'test3': '3', 'test2': 'response'}
Abgeguckt übrigens von der Funktion `grouper()` bei den `itertools`-Beispielen. Für solche Sachen ist die Seite oft Gold wert. :)
fabi1511
User
Beiträge: 23
Registriert: Donnerstag 25. Juni 2009, 18:59

@ahojnnes
stimmt so wäre das eleganter... dass ich da nicht selbst drauf gekommen bin
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Elegant ist was man lesen kann... Wenn du mehr als 5 Minuten über ein solch triviales Problem nachdenkst steht die Chance gut dass du es beim lesen auch tun musst.
Antworten