我有一個JSON對象,我試圖重新分析不同的,我正在尋找一個函數轉換來聚合一個字段的基礎上的兩個獨特鍵控字段。Python函數轉換的JSON字典列表從長到寬
我的數據集是這樣的:
myjson =
[
{
"name": "Fred",
"class": "Algebra",
"topic" : "polynomials",
"extra" : "True"
},
{
"name": "Fred",
"class": "Algebra",
"topic" : "polynomial division",
"extra" : "False"
},
{
"name": "Fred",
"class": "Algebra",
"topic" : "solving",
"extra" : "True"
},
{
"name": "Willbert",
"class": "Dance",
"topic" : "Fancy",
"extra" : "False"
},
{
"name": "Willbert",
"class": "Dance",
"topic" : "Country",
"extra" : "True"
}
]
我想使用的名稱和類作爲唯一鍵用於聚集的主題領域---這裏的「額外」字段的內容不同,我'他們都喜歡保存與第一個條目相關的數據 - 也就是說,他們不需要合併,但應該只從一個記錄中獲取值。
所以,我想轉以上爲:
[
{
"name": "Fred",
"class": "Algebra",
"topic" : ["polynomials","polynomial division","solving"],
"extra" : "True"
},
{
"name": "Willbert",
"class": "Dance",
"topic" : ["Fancy","Country"],
"extra" : "False"
}
]
甚至串聯的主題一起,作爲一個字符串:
[
{
"name": "Fred",
"class": "Algebra",
"topic" : "polynomials polynomial division solving"
},
{
"name": "Willbert",
"class": "Dance",
"topic" : "Fancy Country"
}
]
我solved with groupby之前也有過類似的問題一次,但對於如何開始這一點有點不知所措,特別是因爲我現在有兩個鍵入項目,而不是一個。
UPDATE
我可以一個鍵讓我開始,在這個例子中的作品...
groups = itertools.groupby(myjson,lambda x: (x['name']))
[(k,list(g)) for k,g in groups]
但是在我的實際數據集,「名」單是不夠的消除歧義 - 我需要按「名稱」和「班級」進行分組。
這不起作用:
groups = itertools.groupby(myjson,lambda x: (x['name'],x['class']))
[(k,list(g)) for k,g in groups]
更新2
Found this link solving a similar problem這表明2組密鑰是不平凡的---這真的是必要的,或者是有其他人的方式更熟悉itertools的細節可以指出更好地使用groupby?
爲什麼在結果的第一個字典中「'extra」:「True」? –
這只是爲了說明數據集中有一些字段既不是關鍵字,也不是我想特別彙總的項目,但仍然需要結束。 – Mittenchops
但它不是「結轉」。在「Fred」,「Algebra」的源記錄中,有時是「真」,有時是「假」。那麼我怎麼知道選擇什麼樣的價值呢? –