2017-11-01 10 views
-4

もっと良い方法を得るには? josn:()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'}' 

結果が必要です。

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

これを試しました。

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

が、あなたの 'home'変数が最初にスローされます。 'SyntaxError:無効な構文'。あなたの質問を更新する – RomanPerekhrest

+2

'json.loads(...) 'を使って解析し、同じ結果を反復で生成するのはどうですか? –

+1

作業コードを記入してください。有効なJSONファイルのどこからデータを取得していますか? –

答えて

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

ので、いくつかの文字列の魔法の時間:

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(', ') 

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

であなたを着陸する予定しかし、本質的には、これはまったく同じこと、あなたを行うための1行の回避策ですその代わりにやっていた。これは、文字列homeを辞書に変換して理解に使用します。最後に、辞書は文字列に置き換えられます。私は、それが印刷目的のためである場合を除いて、json内で彫刻された構造の部分を取り除くための使用が何であるかを見ません。これは、dictの理解においてより効率的に行うことができます。

+1

'eval(...)'は、無しのIMOです。 –

+0

さて、もしあなたがjsonを入手したソースを信用していないのであれば、すぐにセキュリティ上の問題につながる可能性があるので、 'eval'を使用してはいけません。@клйкбаутоьмажазвайкукасはより安全な' literal_eval' Pythonが 'ast'を組み込んだ – Uvar

-1

あなたは

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

は、あなたが使用できる正規表現を使用できast.literal_eval()

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

出力:

>>> res 
'1p: 2, 2p: 0, rs: 2, 3p: 0, penalty: 0, fe: 2, ord: 2, ot: 0' 
関連する問題