2016-03-26 66 views
1

私は次のpythonの問題に苦しんでいます。私は既存のリストからjson出力を作成したいが、それは私が実現できない3レベルの構造である。配列の配列からjson出力を作成する

私は2レベル構造を作成する方法を知っている:

data = json.dumps(
    [ {'book_id': i, 'exam': [{'count': k, 'wordids': w}]} \ 
     for k,i,w, in \ 
     zip(examcounts, bookid_list, wordid_list)], 
    indent=4) 

有効な2レベルの構造を生成しますが、私は何とかこれにループのために別のものを実装する必要がある、私はそれを理解できませんでしたどうやって?

そう望んだ出力は次のようになります。

[ 
    { 
     "book_id": "a", 
     "exams": [ 
      { 
       "exam": [ 
        { 
         "result":"B" 
         "wordids": [ 
          25201L, 
          41851L, 
          10134L 
         ] 
        } 
       ], 
       "exam": [ 
        { 
         "result":"A" 
         "wordids": [ 
          43, 
          41, 
          10 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     "book_id": "b", 
     "exams": [ 
      { 
       "exam": [ 
        { 
         "result":"C" 
         "wordids": [ 
          25, 
          10 
         ] 
        } 
       ], 
       "exam": [ 
        { 
         "result":"C" 
         "wordids": [ 
          25, 
          10 
         ] 
        } 
       ], 
       "exam": [ 
        { 
         "result":"F" 
         "wordids": [ 
          43, 
          41, 
         ] 
        } 
       ] 
      } 
     ] 
    } 
] 

リスト例:

bookid_list: [u'a', u'b'] 
exmcounts: [22, 22, 20, 21, 21, 21, 21, 18] 
results: ['B','A','C','C','F'...] with 8 length 
wordid_list: [[25201L, 41851L, 10134L, 12174L, 6899L, 26078L, 12457L, 12176L, 26056L, 9451L, 25164L, 6618L, 43482L, 18681L, 12370L, 43272L, 15561L, 43483L, 30121L, 7715L, 21111L, 9461L], [13822L, 5172L, 7176L, 25754L, 12372L, 5509L, 16712L, 6187L, 8263L, 15408L, 20262L, 43487L, 5143L, 43488L, 6145L, 5697L, 7581L, 43489L, 22538L, 19417L, 43491L, 21498L], [19475L, 11631L, 12172L, 19495L, 30396L, 37274L, 43493L, 32393L, 5945L, 37521L, 6956L, 43494L, 36517L, 43495L, 13255L, 6558L, 12867L, 13382L, 6489L, 15447L]] 

(wordidリストは8の長さを有し、各項目22の長さを有し、22、20 、21 ..) 事前に大きな感謝!

+0

:例の下には、必要に応じて8に出て拡張することができ三つの要素でリストを含んでいますか? – schwobaseggl

+0

@ Parpet私はリストを提供しました –

+0

@ Parfait私はそれを追加しました –

答えて

0

3レベルの辞書にデータを打ち込んでみてください。

dic = {'book_id': 'a', 'exams': {'exam1' : {'result': 'b', 'wordids': [25, 41, 10] } } } 
data = json.dumps(dic) 

すべての型がJSON直列化可能である限り、3レベルの辞書から3レベルのJSONを取得する必要があります。

+0

あなたはその質問に答えなかった。しかし、それをあなたの考えに変えれば、必要ならば2つのforループを使ってリストから3レベルの辞書を作る方法がわかりません。 –

+0

まず、あなたは実際に質問しませんでした;)。第二に、私はあなたのリストをもっと見なければならないし、あなたが得ているものに完全に答えるためには彼らの見た目を見なければならない。たとえば、出力には文字列 '' exam ''と '' result "'がありますが、それらは 'json.dumps'呼び出しには存在しません。 – mwm314

+0

ポイントを取った:)私はあなたと仕事をしている(または少なくとも類似している)リストをあなたにくれました。 「結果」パラメータは、私が何をする必要があるかを示すためのものです。私が苦労しているのは、wordids配列を提供することです。 –

0

すべてのリストが同じ長さであると仮定すると、zip()にそれぞれを追加し、それぞれをjson文字列に埋め込むことができます。なぜあなたはシングルトンリスト内の個々の `exam`データをラップしない

import json 

bookid_list = [u'a', u'b', u'c'] 
examcounts = [22, 22, 20] 
results = ['B','A','C'] 
wordid_list = [[25201, 41851, 10134, 12174, 6899, 26078, 12457, 12176, 26056, 
       9451, 25164, 6618, 43482, 18681, 12370, 43272, 15561, 43483, 
       30121, 7715, 21111, 9461], 
       [13822, 5172, 7176, 25754, 12372, 5509, 16712, 6187, 8263, 
       15408, 20262, 43487, 5143, 43488, 6145, 5697, 7581, 43489, 
       22538, 19417, 43491, 21498], 
       [19475, 11631, 12172, 19495, 30396, 37274, 43493, 32393, 5945, 
       37521, 6956, 43494, 36517, 43495, 13255, 6558, 12867, 13382, 6489, 15447]] 

data = json.dumps(
    [ {'book_id': b, 'exams': [{'exam': [{'results': r, 'wordids': w}]}]} \ 
     for b,e,r,w, in \ 
     zip(bookid_list, examcounts, results, wordid_list)], 
    indent=4) 

print(data) 

出力

[ 
    { 
     "book_id": "a", 
     "exams": [ 
      { 
       "exam": [ 
        { 
         "results": "B", 
         "wordids": [ 
          25201, 
          41851, 
          10134, 
          12174, 
          6899, 
          26078, 
          12457, 
          12176, 
          26056, 
          9451, 
          25164, 
          6618, 
          43482, 
          18681, 
          12370, 
          43272, 
          15561, 
          43483, 
          30121, 
          7715, 
          21111, 
          9461 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     "book_id": "b", 
     "exams": [ 
      { 
       "exam": [ 
        { 
         "results": "A", 
         "wordids": [ 
          13822, 
          5172, 
          7176, 
          25754, 
          12372, 
          5509, 
          16712, 
          6187, 
          8263, 
          15408, 
          20262, 
          43487, 
          5143, 
          43488, 
          6145, 
          5697, 
          7581, 
          43489, 
          22538, 
          19417, 
          43491, 
          21498 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     "book_id": "c", 
     "exams": [ 
      { 
       "exam": [ 
        { 
         "results": "C", 
         "wordids": [ 
          19475, 
          11631, 
          12172, 
          19495, 
          30396, 
          37274, 
          43493, 
          32393, 
          5945, 
          37521, 
          6956, 
          43494, 
          36517, 
          43495, 
          13255, 
          6558, 
          12867, 
          13382, 
          6489, 
          15447 
         ] 
        } 
       ] 
      } 
     ] 
    } 
] 
関連する問題