2016-04-07 12 views
0

jsonのタプルのリストを返すが、私の期待するものが得られないので、コードに何か問題がある。タプルのリストをjsonに変換する方法

この質問はすでに尋ねられていますが、私は知っていますが、入力がはるかに簡単で、私の鉱山では機能しません。

入力リスト

result = [('a', 'company', '2', 2, 'myError'), 
      ('c', 'company', '5', 7, 'myError'), 
      ('b', 'tax', '23', 1, 'myError')] 

これはコードです:私は、リストresultを反復し、その中にタプルをアンラップし、タプルeを連結します。

e =() 
for element in result: 
    e = e + ((element[1], 
      (('uuid', str(element[0])), 
      ('id', element[2]), 
      ('error_id', element[3]), 
      ('error_msg', element[4]))),) 


logging.info(json.dumps(dict(e))) 

実際の結果

{ 
    "company": [ 
     ["id", "a"], 
     ["row", "2"], 
     ["err", 2], 
     ["msg", "myError"] 
    ], 
    "tax": [ 
     ["id", "b"], 
     ["row", "23"], 
     ["err", 1], 
     ["msg", "myError"] 
    ] 
} 

期待された結果、私は正しいJSONを入手するにはどうすればよい

{ 
    "company": [ 
     { 
      "id": "a", 
      "row": "2", 
      "err": 2, 
      "msg": "myError" 
     }, 
     { 
      "id": "c", 
      "row": "5", 
      "err": 7, 
      "msg": "myError" 
     } 
    ], 
    "tax": [ 
     { 
      "id": "b", 
      "row": "23", 
      "err": 1, 
      "msg": "myError" 
     }  
    ] 
} 

答えて

2
from collections import defaultdict 
e = defaultdict(list) 
for element in result: 
    e[element[1]].append({'uuid': str(element[0]), 'id': element[2], 'error_id': element[3], 'error_msg': element[4]}) 

dict(e)を使用すると、希望する形式のdictが表示されます。

関連する問題