2016-05-03 15 views
1

Ich habe Eingangsdaten wie dieseGruppe von Daten basierend auf einem Gebiet der Liste

input = ((1,'MCA', 'Science'),(2,'physic', 'Science'),(3,'chemsitry', 'Science'),(4,'punjabi', 'arts'),(5,'hindi', 'arts')) 

ich diese Daten durch drittes Feld gruppieren möge (Wissenschaft/Kunst) wie diese

result = {"arts":[{"id":"4","name":"punjabi"},{"id":"5","name":"hindi"}],"Science":[{"id":"1","name":"MCA"},{"id":"2","name":"physics"},{"id":"3","name":"chemistry"}]} 

Wie kann Ich erreiche das auf effiziente Weise?

Antwort

2

Ich würde eine collections.defaultdict empfehlen. Iterieren Sie über Ihre Originaldaten und weisen Sie diesem defaultdict neue Wörterbücher zu.

import collections 
result = collections.defaultdict(list) 
i = ((1,'MCA', 'Science'),(2,'physic', 'Science'),(3,'chemsitry', 'Science'),(4,'punjabi', 'arts'),(5,'hindi', 'arts')) 
for id,name,subject in i: 
    result[subject].append({'id':str(id), 'name':name}) 

Sie enden mit folgendem Ergebnis auf:

>>> result 
defaultdict(<class 'list'>, {'Science': [{'name': 'MCA', 'id': '1'}, {'name': 'physic', 'id': '2'}, {'name': 'chemsitry', 'id': '3'}], 'arts': [{'name': 'punjabi', 'id': '4'}, {'name': 'hindi', 'id': '5'}]}) 

Es ist nicht den Algorithmus beeinflussen, aber nicht vergessen, den Inhalt der Rechtschreibung nochmals zu überprüfen, bevor es in das Programm setzen (nämlich 'chemsitry' et al .).

+0

kannst du bitte so konvertieren: {"data": [{"Departcategory": "Wissenschaft", "DepartmentNames": [{"dentureId": 1, "name": "MCA"}, {"dentureId": 2 , "name": "physics"}]}, {"Departcategory": "Kunst", "DepartmentNames": [{"départmentId": 3, "name": "punjabi"}, {"départmentId": 4, " Name ":" Hindi "}]}]} –

2

iterieren einfach durch die Eingabe, jedes Element in die Ergebnisse Wörterbuch einfügen:

result = {} 
for id, name, subject in input: 
    if subject not in result: 
     result[subject] = [] 
    result[subject].append({"id":str(id), "name":name}) 
+0

Sie sollten den Namen 'input' vermeiden (und keine Notwendigkeit für' '' '). – TigerhawkT3

+0

@ TigerhawkT3 Ich habe nur 'input' verwendet, weil das das OP es nannte, aber Sie haben Recht, dass es kein idealer Name ist. Was das '' 'betrifft, hast du auch Recht! Hatte in letzter Zeit meine Meinung in Java - ich werde es jetzt korrigieren. Danke für den Fang! – Christian