2015-03-25 88 views
0

給定下面的矩陣,如果組(col2)重複,我想要創建和json輸出以遍歷矩陣行並追加項(col 1):通過對行進行分組創建json文件

matrix = [ 
     ['JAN', '1', 'abc'], 
     ['FEB', '7', 'xyz'], 
     ['FEB', '4', 'abc'], 
     ['MAR', '3', 'xyz'], 
     ['DEC','12', 'xyz'] 
     ] 

怎麼能是創造了一個輸出/ JSON文件:

{ 
    "month": ["JAN","FEB","FEB","MAR","DEC"], 
    "items": [ 
     { "group":"abc", 
     "data":[1,4] 
     }, 
     { "group":"xyz", 
     "data":[7,3,12] 
     } 
     ] 
    } 

我試過轉置矩陣/列,並構建一個字典,我追加的項目在一個for循環,但我缺少的東西,它變得混亂。它應該是一個簡單的方法。

+0

你可以展示一些努力來解決這個問題。顯示你有什麼嘗試。 – 2015-03-25 00:24:11

+0

JSON文件是否需要整齊,漂亮,間隔,縮進? – 2015-03-25 00:29:16

回答

6

這個程序:

from itertools import groupby 
import json 
matrix = [ 
    ['JAN', '1', 'abc'], 
    ['FEB', '7', 'xyz'], 
    ['FEB', '4', 'abc'], 
    ['MAR', '3', 'xyz'], 
    ['DEC', '12', 'xyz'] 
] 
months = [x[0] for x in matrix] 
items = [[x[2], int(x[1])] for x in matrix] 
items = sorted(items, key=lambda x: x[0]) 
items = groupby(items, lambda x: x[0]) 
items = [{"group": k, "data": [x[1] for x in g]} for k, g in items] 
result = { 
    "month": months, 
    "items": items 
} 
print (json.dumps(result, sort_keys=True, indent=4, separators=(',', ': '))) 

產生這樣的輸出:

{ 
    "items": [ 
     { 
      "data": [ 
       1, 
       4 
      ], 
      "group": "abc" 
     }, 
     { 
      "data": [ 
       7, 
       3, 
       12 
      ], 
      "group": "xyz" 
     } 
    ], 
    "month": [ 
     "JAN", 
     "FEB", 
     "FEB", 
     "MAR", 
     "DEC" 
    ] 
} 
+1

不錯的@羅布;-) – brunofitas 2015-03-25 00:33:14

+0

感謝羅布,你的解決方案是偉大的,但它不是所需的輸出。 **注意**訂單被改變,例如,而不是「* data」:[7,3,12] *它返回*「data」:[3,7,12] *訂單如何被尊重? – 2015-03-25 14:30:42

+1

@Algina,你可以通過給'sorted()'調用添加一個'key'參數來實現這個結果,就像這樣:'items = sorted(items,key = lambda x:x [0])' – 2015-03-25 14:38:11

-1

這也可能是最好使用json模塊,但你可以在你的石膏,之後標準寫入文件:

with open('data.json', 'w') as data: 
    data.write(str(my_dict)) 
+0

這不會按照OP所要求的將數據分組爲組。 OP不僅僅希望以JSON格式寫入數據。 – 2015-03-25 00:50:46

+0

你是指什麼羣體? OP說他已經以字典格式獲取數據。剩下的就是投射和寫作。 – 2015-03-25 00:52:10

+0

「我**已經嘗試了**轉置矩陣/列並構建了一個字典,我在for循環中添加了項目,但是我錯過了一些東西,並且變得混亂。 – 2015-03-25 00:53:21

相關問題