2016-05-18 22 views
0

Ich habe Daten in einem JSON Objekt mit einem key:value wie in Python unten. Es gibt zwei Datensätze mit derselben ID für die Hari und für die Liz.Python - Konvertieren JSON-Objektdaten in eine Liste

from collections import defaultdict 
from itertools import * 
from operator import itemgetter 

data = [ 
    { 
    "fname": "Abc", 
    "lname": "xyz", 
    "id": 15, 
    "club": "-", 
    "date": "-" 
    }, 
    { 
    "fname": "Hari", 
    "lname": "Lee", 
    "id": 13, 
    "club": "Manutd", 
    "date": "2016-03-20T22:00:00.000Z" 
    }, 
    { 
    "fname": "David", 
    "lname": "James", 
    "id": 14, 
    "club": "Barca", 
    "date": "-" 
    }, 
    { 
    "fname": "Hari", 
    "lname": "Lee", 
    "id": 13, 
    "club": "Chelsea", 
    "date": "2012-03-20T22:00:00.000Z" 
    }, 
    { 
    "fname": "Liz", 
    "lname": "Kiz", 
    "id": 16, 
    "club": "-", 
    "date": "-" 
    }, 
    { 
    "fname": "Liz", 
    "lname": "Kiz", 
    "id": 16, 
    "club": "Falkon", 
    "date": "2014-03-20T22:00:00.000Z" 
    } 
] 

newdata = [] 
#for item, value in enumerate(data): 
    #for i,v in value.iteritems(): 
    #print value['id'] 
    #print value[i] 
    #print i,v 
    #newdata.append() 

Ich möchte ohne Schlüssel JSON-Daten in die Liste neu zu formatieren und verschmelzen dupliziert ID als eine Liste der Liste. Der Datensatz mit den gleichen IDs wird in die Liste der Liste wie unten abgebildet abgebildet. Wie kann ich das erreichen?

newdata = [[["Hari", "Lee", "Manutd", "2016-03-20T22:00:00.000Z"], ["Hari", "Lee", "Chelsea", "2012-03-20T22:00:00.000Z"]], 
    ["David", "James", "Barca", "-"], ["Abc", "xyz", "-" "-"], [["Liz", "Kiz", "-", "-"], ["Liz", "Kiz", "Falkon", "2014-03-20T22:00:00.000Z"]]] 

Iterate über die neuen Listendaten und schreibt jeweils Listendaten als Zeile in Excel (xlwt) Datei

for i1, v1 in enumerate(newdata): 
    for i2,v2 in enumerate(v1): 
    if(type(v2) is str): 
     print v2 
    else: 
     for i3,v3 in enumerate(v2): 
     print v3 

Antwort

2

die gleiche ID Sie in einem dict

zum Speichern von Daten müssen prüfen
ret_dict = {} 

Aber dict ist nicht bestellt. Wenn Sie Ihre Bestellung halten möchten, können Sie Sie OrderedDict

from collections import OrderedDict 
ret_dict = OrderedDict() 
for element in data: 
    # To remove 'id' from the dict 'element' use element.pop('id') 
    # element.pop('id') return the value of id 
    ret_dict.setdefault(element.pop('id'), []).append(element.values()) 

Für mich ret_dict.values() ist schon ein gutes Ergebnis:

>>> print ret_dict.values() 
[[['xyz', '-', '-', 'Abc']], [['Lee', 'Manutd', '2016-03-20T22:00:00.000Z', 'Hari'], ['Lee', 'Chelsea', '2012-03-20T22:00:00.000Z', 'Hari']], [['James', 'Barca', '-', 'David']], [['Kiz', '-', '-', 'Liz'], ['Kiz', 'Falkon', '2014-03-20T22:00:00.000Z', 'Liz']]] 

Aber für genau das, was Sie wollen, müssen Sie eine neue Liste erstellen von die values des letzten dict:

ret_list = [e[0] if len(e) == 1 else e for e in ret_dict.itervalues()] 

itervalues() den Iterator von Werten statt einer Liste wie 01 zu erhalten
Ausgang:

>>> print ret_list 
[['xyz', '-', '-', 'Abc'], [['Lee', 'Manutd', '2016-03-20T22:00:00.000Z', 'Hari'], ['Lee', 'Chelsea', '2012-03-20T22:00:00.000Z', 'Hari']], ['James', 'Barca', '-', 'David'], [['Kiz', '-', '-', 'Liz'], ['Kiz', 'Falkon', '2014-03-20T22:00:00.000Z', 'Liz']]] 
+0

Du bist ein Held! Vielen Dank! – MysticCodes

+0

Wie kann ich Elementwerte in der Reihenfolge anfügen und ID-Wert aus der Liste entfernen? – MysticCodes

+0

Normales Diktat ist nicht bestellt. Sie müssen 'OrderedDict' verwenden, um die Elementwerte der Reihe nach anzuhängen. Um ** id ** von einem 'dict' oder' OrderedDict' zu entfernen, können Sie 'pop' verwenden. Ich habe meine Antwort aktualisiert. – qvpham

Verwandte Themen