2017-09-18 35 views
0

私はそれにネストされた辞書を持つ複雑な文字列を持っています。この辞書には、さらに3つの類似した辞書のリストがあります。これをPython辞書に変換するにはどうしたらいいですか?助けてください。複雑な文字列からネストされたPython辞書を抽出する

入力:'name: "data dict" id: 2\nv6: false\nstats {\n hosts {\n cnt1: 256\n cnt2: 0\n }\n groups {\n cnt1: 1\n cnt2: 0\n }\n main_groups {\n cnt1: 1\n cnt2: 0\n }\n main_hosts {\n cnt1: 256\n cnt2: 0\n }\n}\n group_id: "None"'

期待される結果:{ name: "data dict", id: 2, v6: false, stats: { hosts: { cnt: 1, cnt: 2 } groups: { cnt: 1, cnt: 2 } main: { cnt: 1, cnt: 2 } main_hosts: { cnt: 1, cnt: 2 } } }

+3

この文字列はどのようになりましたか?これは、ある時点でJSONであったようです。おそらく、この混乱を抽出して有効なJSONを抽出するものを修正するのが最も簡単です... –

+1

私は 'regex'を使用するとは思わない。私はこのような作業のために['pyparsing'](http://pyparsing.wikispaces.com/)のファンです。 –

+0

書式設定された文字列を表示し、yamlのように見える場合は、yamlモジュールは変換を行います – Serge

答えて

1

TSは、前述のように、ネストされた辞書(最初の時間、私は妥当性への暗黙の参照としてそれを解釈)した文字列があります。文字列の内容は、有効 JSONである場合は、jsonビルトイン・パッケージは、あなたがそれを解析するために必要なすべてが含まれて使用することができます。

import json 
data = json.loads(your_string) 

JSON package docsで詳細をお読みください。

そうでない場合は、正規表現を書くか、pyparsingパッケージを使用してこの文字列を処理できます。

+0

元の文字列が正しくフォーマットされていないため、これは機能しません。 – user3354059

+0

もう一度見てください。それは? –

+0

これは有効なJSONではありません。試してみましたか?また、yaml(またはjson)モジュールを使用してください。 – dawg

0

入力の一部を編集すると、yamlがロードされ、データオブジェクトは要求したとおりにネストされた辞書のセットです。 入力文字列はどのように作成されましたか?特定の編集は、次のとおり

  • 変更 "データ辞書" ID: "から "データ辞書" \ NID:"
  • 変化に "\ ngroup_id"
  • 変化すべて{に "\ nはGROUP_ID" :、
  • すべてを削除}
関連する問題