2017-06-22 9 views
0

Ich habe Probleme, meinen Code zu ändern, um ein anderes Wörterbuch zu trennen, um "hostNumber" und "hostMode" in meiner Ausgabe zu trennen. Unten ist der Code, die here und manipuliert gefunden:Pandas Create Dict in tief verschachtelten JSON

import json 
from json import dumps 

top = "Top_Level" 
top_dict = {} 
top_dict["name"] = top 
top_dict["sub_name"] = [] 
for site, site_data in df.groupby("site", sort=False): 
    site_dict = {} 
    site_dict["site"] = site 
    site_dict["sub_site"] = [] 
    for stor, stor_data in site_data.groupby("system", sort=False): 
     stor_dict = {} 
     stor_dict["system"] = stor 
     stor_dict["sub_system"] = [] 
     for port, port_data in stor_data.groupby("portId", sort=False): 
      port_dict = {} 
      port_dict["portId"] = port 
      port_dict["sub_portId"] = [] 
      for host, host_data in port_data.groupby("hostName", sort=False): 
       host_data = host_data.drop(["portId", "system", 
              "site"], axis=1).set_index(
               "hostName") 
       for n in host_data.to_dict(orient="records"): 
        port_dict["sub_portId"].append({"hostName": host, 
                "sub_hostName": [n]}) 

      stor_dict["sub_system"].append(port_dict) 
     site_dict["sub_site"].append(stor_dict) 
    top_dict["sub_name"].append(site_dict) 
top_out = dumps(top_dict) 
parsed = json.loads(top_out) 

ergeben:

print(json.dumps(parsed, indent=4, sort_keys=True)) 

{ 
"name": "Top_Level", 
"sub_name": [ 
    { 
     "site": "A", 
     "sub_site": [ 
      { 
       "system": "system01", 
       "sub_system": [ 
        { 
         "portId": "1-A", 
         "sub_portId": [ 
          { 
           "hostName": "ahost005", 
           "sub_hostName": [ 
            { 
             "hostNumber": "1", 
             "hostMode": "WIN" 
            } 
           ] 
          }, ... 

Wie kann ich meinen Code ändern, um es Ausgabe in folgenden Weise:

       ... 
           "sub_hostName": [ 
            {"hostNumber": "1"}, 
            {"hostMode": "WIN"} 
           ]... 

Antwort

0

Verwenden die folgende Zeile anstelle von "sub_hostName": [n]:

"sub_hostName": [dict([i]) for i in n.items()] 
Verwandte Themen