2017-11-01 5 views
-4

Wie kann ich einen besseren Weg? josn:Ich möchte einen besseren Weg kennen zu ersetzen() Python

home = '{u'1p': u'2', u'2p': u'0', u'rs': u'2', u'3p': u'0', u'penalty': u'0', u'fe': u'2', u'ord': u'2', u'ot':u'0'}' 

möchte ich das Ergebnis.

home = '1p: 2, 2p: 0, rs: 2, 3p: 0, penalty: 0, fe: 2, ord: 2, ot:0' 

Ich habe das versucht.

home= sport.get("home") 
home= str(home).replace("{","") 
home= str(home).replace("}","") 
home= str(home).replace("u'","") 
home= str(home).replace("'","") 
+1

aber Ihre 'home' Variable wird zunächst werfen 'SyntaxError: ungültige Syntax'. Aktualisiere deine Frage – RomanPerekhrest

+2

Warum parst du es nicht einfach mit 'json.loads (...)' und produzierst dasselbe Ergebnis per Iteration? –

+1

Bitte schreiben Sie einen funktionierenden Code. Woher beziehen Sie Ihre Daten - eine gültige JSON-Datei? –

Antwort

2
import json 
d = json.loads(home) 
print(','.join('%s: %s' % tup for tup in d.items())) 
-1

So, Zeit für einige String Magie:

home = "{u'1p': u'2', u'2p': u'0', u'rs': u'2', u'3p': u'0', u'penalty': u'0', u'fe': u'2', u'ord': u'2', u'ot':u'0'}" 
import ast 
home = ''.join(['{}: {}, '.format(k,v) for k,v in ast.literal_eval(home).items()]).strip(', ') 

Dies wird Ihnen mit home = '1p: 2, 2p: 0, rs: 2, 3p: 0, penalty: 0, fe: 2, ord: 2, ot: 0'

landen Aber im Grunde ist dies eine einzeilige Abhilfe für Sie genau die gleiche Sache zu tun taten mit den Ersetzungen. Es konvertiert die Zeichenfolge home in ein Wörterbuch, das für ein Verständnis verwendet wird. Am Ende wird das Wörterbuch durch eine Zeichenfolge ersetzt. Ich sehe nicht, was für die Entfernung eines Stückes Struktur, die in der JSON eingegraben ist, verwendet wird, außer wenn es für Druckzwecke ist, die effizienter in einem Diktatverständnis durchgeführt werden können.

+1

Das 'eval (...)' ist ein no-no IMO. –

+0

Okay, okay, wenn du der Quelle, von der du den JSON bekommst, nicht vertraust, solltest du in der Tat 'eval' nicht verwenden, da dies schnell zu Sicherheitsproblemen führen kann. @ Клйкбаутоьмажазвайкукас aktualisiert, um das sicherere' literal_eval' aus der Python eingebaut 'Ast' – Uvar

-1

Sie regex verwenden könnte

home = sport.get("home") 
home = re.sub(r'[{}\'u]+','', home) 
0

Sie können ast.literal_eval()

res = ''.join('{}: {}, '.format(k, v) for k, v in ast.literal_eval(home).items())[:-2] 

Ausgang:

>>> res 
'1p: 2, 2p: 0, rs: 2, 3p: 0, penalty: 0, fe: 2, ord: 2, ot: 0' 
Verwandte Themen