2016-11-01 1 views
0

Brauchen Sie Hilfe unter Strafe zu spalten und wandeln es Schlüsselwerte solltenPython, wie Werte teilen einige sind mit Leerzeichen

[score=2 last=19 delay=5 distance=10k 2 events name=Denis John P place=New York] 

dict Ergebnisse Wörterbuch:

"Event": { 
"score": "2", 
    "last": "19", 
    "delay": "5", 
    "distance": "10k 2 events", 
    "name": "Denis John", 
    "place": "New York", 
} 

Ich bin nicht in der Lage zu Figur es aus der Lösung, versuchte viel mit re aber versäumt, etwas zu teilen = etwas, etwas = etwas Raum etwas mit dem Trennzeichen '='

Schätzen Sie Ihre Hilfe!

+1

, dass ein String sein soll? '" score = 2 last = 19 ... "' –

+0

Vielleicht möchten Sie [ask] und [mcve] lesen. – boardrider

+2

Sie können einen regulären Ausdruck verwenden, etwa wie "r" ([^ \ s] +) = ([^ =] +) \ s "' –

Antwort

0

Diese Lösung ist nicht perfekt. Es erfordert, dass jeder Wert mit einem Leerzeichen endet, das er verwirft. Ich löse dies, indem ich einfach ein Leerzeichen am Ende der Zeichenfolge hinzufüge und dann jeden Wert abziehe.

import re 
s = "score=2 last=19 delay=5 distance=10k 2 events name=Denis John P place=New York" 
s = s + ' ' 
res = re.findall(r"([^\s]+)=([^=]+)\s", s) 
res = [(a, b.strip()) for (a,b) in res] 
d = {"Events": dict(res)} 
0

Dies sollte die Arbeit machen:

s = '[score=2 last=19 delay=5 distance=10k 2 events name=Denis John P place=New York]' 
l = s[1:-1].split('=') 
data = {} 
while len(l) > 0: 
    val = l.pop() 
    if len(l) > 1: 
     head,key = l.pop().rsplit (maxsplit=1) 
     l.append (head) 
    else: 
     key = l.pop() 
    data[key] = val 

from pprint import pprint 
pprint (data) 

Ausgänge:

{'delay': '5', 
'distance': '10k 2 events', 
'last': '19', 
'name': 'Denis John P', 
'place': 'New York', 
'score': '2'} 
+0

Vielen Dank für die Hilfe ... Es löste das Problem – Aditya

+0

@Aditya Froh, zu helfen. Im Gegenzug könntest du meine Antwort akzeptieren und/oder upvoten. –

Verwandte Themen