Python输出dict到新的json结构

时间:2017-06-05 15:14:41

标签: python json dictionary jupyter-notebook

我是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)

这给了我这个结果:

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

如你所见,这不是一个正确的json结构,而对于我的生活,我无法弄清楚如何使结构正确。输出一直回到根元素,所以我得到......] [...而不是......},{....在" sni"块 如果您有关于代码如何更好的提示或更好的方法来实现结果,请让我拥有它们。

2 个答案:

答案 0 :(得分:1)

使用一些嵌套的comprehensions,您可以执行以下操作:

> 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"
    }
   ]
  }
 }
]

答案 1 :(得分: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)