66466


pythonで以下のような2次元配列を

[code]

    [
      ['部署A','ID100',10],
      ['部署A','ID101',11],
      ['部署B','ID200',8],
      ['部署B','ID201',30],
    ]
    
[/code]

以下のようなJSONに変換する方法はありますでしょうか。。（部署ごとにグループして、ID分配列にしたいです）

[code]

    [
      {
       department:'部署A',
       data:[
         {ID:'ID100',value:10},
         {ID:'ID101',value:11}
       ]
      },
      {
       department:'部署B',
       data:[
         {ID:'ID200',value:8},
         {ID:'ID201',value:30}
       ]
      }
    ]
    
[/code]

実現したいこととして、以下のHighChartsグラフを作成するためのデータを作りたいです。  
良い方法はありますでしょうか。  
[https://codepen.io/pen/?&editable=true=https%3A%2F%2Fwww.highcharts.com%2Fsamples%2Fcodepen%2Fhighcharts%2Fdemo%2Fpacked-
bubble-
split](https://codepen.io/pen/?&editable=true=https%3A%2F%2Fwww.highcharts.com%2Fsamples%2Fcodepen%2Fhighcharts%2Fdemo%2Fpacked-
bubble-split)


CC BY-SA 4.0
2020-05-09T13:32:52.623
66465
2020-05-09T14:39:58.090
2020-05-09T13:42:23.100
32986
40074
question
python python3 json highcharts
python3で2次元配列を、グルーピングしたJSONに変換する方法ってありますか？


以下は
[itertools.groupby()](https://docs.python.org/3/library/itertools.html#itertools.groupby)
で部署毎にグルーピングしておいて、`json.dumps()` で JSON 形式に変換する方法です。

[code]

    from itertools import groupby
    from operator import itemgetter
    import json
    
    tbl = [
      ['部署A', 'ID100', 10],
      ['部署A', 'ID101', 11],
      ['部署B', 'ID200',  8],
      ['部署B', 'ID201', 30],
    ]
    
    lst = [{
            'department': dep,
            'data': [{'ID': d[1], 'value': d[2]} for d in data]
           } for dep, data in groupby(tbl, key=itemgetter(0))]
    
    json_text = json.dumps(lst, ensure_ascii=False, indent=2)
    print(json_text)
    =>
    [
      {
        "department": "部署A",
        "data": [
          {
            "ID": "ID100",
            "value": 10
          },
          {
            "ID": "ID101",
            "value": 11
          }
        ]
      },
      {
        "department": "部署B",
        "data": [
          {
            "ID": "ID200",
            "value": 8
          },
          {
            "ID": "ID201",
            "value": 30
          }
        ]
      }
    ] 
    
[/code]


CC BY-SA 4.0
2020-05-09T14:39:58.090
66466
2020-05-09T14:39:58.090
66465
answer