2017-06-05 6 views
0

私はPythonには新しく、多くの検索や関連記事を読むにもかかわらず、解決できなかった問題にぶつかっています。すべてのヘルプははるかに高く評価されています 私は、この構造を有する辞書にJSONファイルをインポートしていますPythonの出力は新しいjson構造に変換されます

{ 
"23991": { 
"5115": 10, 
"2611": 22 
}, 
"43223": { 
"7252": 11, 
"4302": 2 
} 
} 

私はこのような構造を持つ新しいJSONファイルに保存したい:だから

[ 
{ 
    "sni": { 
    "code": "23991", 
    "yrken": [ 
    { 
     "code": "5115", 
     "antal": 10 
    }, 
    { 
     "code": "2611", 
     "antal": 22 
    } 
    ] 
    } 
}, 
{ 
    "sni": { 
    "code": "43223", 
    "yrken": [ 
    { 
     "code": "7252", 
     "antal": 11 
    }, 
    { 
     "code": "4302", 
     "antal": 11 
    } 
    ] 
    } 
} 
] 

import os 
import sys 
import json 

pathSNI2Yrke = "Smallsni2Yrke.json" 
with open(pathSNI2Yrke) as data_file: 
sni2Yrke = json.load(data_file) 
#print(sni2Yrke) 

for key in sni2Yrke: 
    value = sni2Yrke[key] 
    d = [{"sni": 
      {"snicode": key, 
      "yrken": [{ "yrkecode":list(value.keys()), 
         "antal": list(value.values())}]}}] 
    j = json.dumps(d, indent=2) 
    #f = open('sample.json', 'w') 
    print (j) 

私にこの結果を与える::

をはるかに私はこのコードを持っています

これは正しいjson構造ではないことがわかりました。私の人生では、構造を正しく取得する方法を理解できません。出力はルート要素までずっと戻ってきますので...] [...の代わりに...}、{.... "sni"ブロックの間 コードの仕組みに関するヒントがあれば結果を達成するためのよりよい方法またはよりよい方法を私に与えてください。いくつかのネストされたcomprehensionsを使用して

+0

をあなたがリストとして保存されています。あなたは何を期待していますか? – user3764893

答えて

1

、次の操作を実行できます。

> d = {'43223': {'4302': 2, '7252': 11}, '23991': {'5115': 10, '2611': 22}} 

> d2 = [ 
    {'sni': 
    {'code': k1, 
    'yrken': [{'code': k2, 'antal': v2} for k2, v2 in v1.items()] 
    } 
    } 
    for k1, v1 in d.items() 
] 

> print json.dumps(d2, indent=1) 
[ 
{ 
    "sni": { 
    "code": "43223", 
    "yrken": [ 
    { 
    "antal": 2, 
    "code": "4302" 
    }, 
    { 
    "antal": 11, 
    "code": "7252" 
    } 
    ] 
    } 
}, 
{ 
    "sni": { 
    "code": "23991", 
    "yrken": [ 
    { 
    "antal": 10, 
    "code": "5115" 
    }, 
    { 
    "antal": 22, 
    "code": "2611" 
    } 
    ] 
    } 
} 
] 
+0

これは私のために働いた!私はちょうどあなたのd2 =と私のコードのd =を置き換え、d.items()の代わりにsni2Yrke.items()のk1、v1のために 'put'を使用しました。 – bruceoz

1

は、楽しみなさい:

result = [] 

for code, dct in your_json.items(): 
    yrken = [] 
    for c, antal in dct.items(): 
     yrken.append({ 
      "code": c, 
      "antal": antal 
     }) 
    result.append({ 
     "sni": { 
      "code": code, 
      "yrken": yrken 
     } 
    }) 

print(result) 
+0

@Formalhautこれも本当にうまくいった。私はこれを選ぶつもりですので、私はそれをよりよく理解するでしょう。 :) – bruceoz

関連する問題