2017-06-22 352 views
0

私は、複数のキーと値を含む辞書を持っており、その値にはキーと値のペアも含まれています。私はどのようにPythonでこの辞書を使用して動的JSONを作成する方法を得ていない。このようなPythonで動的jsonオブジェクトを作成する

image_dict = {"IMAGE_1":{"img0":"IMAGE_2","img1":"IMAGE_3","img2":"IMAGE_4"},"IMAGE_2":{"img0":"IMAGE_1", "img1" : "IMAGE_3"},"IMAGE_3":{"img0":"IMAGE_1", "img1":"IMAGE_2"},"IMAGE_4":{"img0":"IMAGE_1"}} 

私の予想結果:

{ 
    "data": [ 
    { 
     "image": { 
     "imageId": { 
      "id": "IMAGE_1" 
     }, 
     "link": { 
      "target": { 
      "id": "IMAGE_2" 
      }, 
      "target": { 
      "id": "IMAGE_3" 
      }, 
      "target": { 
      "id": "IMAGE_4" 
      } 
     } 
     }, 
     "updateData": "link" 
    }, 
     { 
     "image": { 
     "imageId": { 
      "id": "IMAGE_2" 
     }, 
     "link": { 
      "target": { 
      "id": "IMAGE_1" 
      }, 
      "target": { 
      "id": "IMAGE_3" 
      } 
     } 
     }, 
     "updateData": "link" 
    }, 
    { 
     "image": { 
     "imageId": { 
      "id": "IMAGE_3" 
     }, 
     "link": { 
      "target": { 
      "id": "IMAGE_1" 
      }, 
      "target": { 
      "id": "IMAGE_2" 
      } 
     } 
     }, 
     "updateData": "link" 
    } , 
    { 
     "image": { 
     "imageId": { 
      "id": "IMAGE_4" 
     }, 
     "link": { 
      "target": { 
      "id": "IMAGE_1" 
      } 
     } 
     }, 
     "updateData": "link" 
    } 
    ] 
} 

私はそれを解決しようとしたが、私は期待した結果を取得していないここで辞書です。

result = {"data":[]} 

for k,v in sorted(image_dict.items()): 
    for a in sorted(v.values()): 
     result["data"].append({"image":{"imageId":{"id": k}, 
             "link":{"target":{"id": a}}},"updateData": "link"}) 
print(json.dumps(result, indent=4)) 
+0

を 'json'部分がここに完全に(だけでなく、大部分は)無関係ですが、あなたの質問はどのように行う「です –

+0

あなたは正しい@brunodesthuilliers –

+0

@rajendrapawar、予想されるjsonは無効です。dict '.."リンク内でキーを繰り返すことはできません:{ "target":{ "ID": "IMAGE_2" }、 "ターゲット":{ "ID": "IMAGE_3" }、 "ターゲット":{ "ID": "IMAGE_4" } ..' – RomanPerekhrest

答えて

0

Python辞書では、同じキーで2つの値を持つことはできません。したがって、「ターゲット」と呼ばれる複数のターゲットを持つことはできません。したがって、それらのインデックスを作成することができます。また、私はこの質問は、動的オブジェクトに関係しているのか分からないけど、ここで私が働いてしまったコードです:

import re 
dict_res = {} 
ind = 0 
for image in image_dict: 
    lin_ind = 0 
    sub_dict = {'image' + str(ind): {'imageId': {image}, 'link': {}}} 
    for sub in image_dict[image].values(): 
     sub_dict['image' + str(ind)]['link'].update({'target' + str(lin_ind): {'id': sub}}) 
     lin_ind += 1 
    dict_res.update(sub_dict) 
    ind += 1 
dict_res = re.sub('target\d', 'target', re.sub('image\d', 'image', str(dict_res))) 
print dict_res 
+0

インデックス番号以外は何ですか? – cookiedough

+0

文字列に変換できます。また、関数reを使用します。私はあなたのためにこれを行うコードを編集しました。 – cookiedough

関連する問題