2016-05-18 8 views
1

Ich habe einen Python-Skript, das eine SQL-Abfrage hat in eine Liste von Listen zurückgegeben, zB:Python Umwandlung Abfrageausgabe

result = [ ['12345', 'Red', 'House', 150, '18/05/2016', 27.3], 
      ['34534', 'Blue', 'Car', 500, '22/12/2015', 587.52] ] 

Der erste Eintrag in jeder Liste ist die ID, dann ist jedes Element ein Attribut bezogen auf jeden Datensatz, wie Colour, Type, Size, Date, Cost.

Der Artikel Attribute wie Colour, Date usw. möglicherweise unterschiedlich sind für jede SQL-Abfrage ausführen, da diese auf meine SQL-Abfrage von einem anderen Abfrageergebnis dynamisch hinzugefügt (die Spalten abfragt) zB:

columns = {'RecID': 'RecordID', 'Color': 'Colour', 'Type': 'Type', 'Size': 'Size', 'PurchaseDate': 'Date', 'PurchaseCost': 'Cost'} 

newQueryFields = "[UniqueID]" 
for x in columns: 
    newQueryFields = "{}, [{}]".format(newQueryFields, columns[x]) 

I Ich habe es mit dem folgenden Code in ein Listenwörterbuch geschafft, aber für den (noch nicht geschriebenen) Rest des Codes wäre es besser, wenn ich auf Wörterbuchelemente verweisen könnte.

newResult = dict() 
for rec in result: 
    newResult[rec[0]] = rec 

was zur Folge hat:

result = {'12345': ['12345', 'Red', 'House', 150, '18/05/2016', 27.3], 
      '34534': ['34534', 'Blue', 'Car', 500, '22/12/2015', 587.52] } 

aber ich versuche, die Ergebnisse in ein Wörterbuch der Wörterbücher zu bekommen (ich glaube?), Aber ich kann nicht meinen Kopf um, wie meine zu strukturieren Code zur Ausgabe:

newResult = {'12345': {'ID': '12345', 'Colour': 'Red', 'Type': 'House', 'Size': 150, 'Date': '18/05/2016', 'Cost': 27.3}, 
      '34534': {'ID': '34534', 'Colour': 'Blue', 'Type': 'Car', 'Size': 500, 'Date': '22/12/2015', 'Cost': 587.52} } 
+0

Ist die Reihenfolge der Felder immer gleich? – AKS

+0

Das Ergebnis der Abfrage gibt die Felder immer in der Reihenfolge aus, in der sie abgefragt werden. Die Reihenfolge der Felder ist kein Problem, aber da die Feldnamen dynamisch sind, können sie ein beliebiges Feld in beliebiger Reihenfolge sein. – Midavalo

Antwort

2

Dies ist Sie eine Idee zu geben, was Sie tun können, wenn Sie die columns bereits mit Ihnen hatte:

columns = ['ID', 'Colour', 'Type', 'Size', 'Date', 'Cost'] 
newResult = {rec[0]: dict(zip(columns, rec)) for rec in result} 

Offensichtlich müssen Sie zuerst die columns bekommen, die dynamisch in Ihrem Fall hinzugefügt werden.

+0

Also, wenn ich meine Spalten in eine Liste bekommen kann, sollte ich in der Lage sein, das in newResult zu übergeben, da das Ergebnis in der gleichen Reihenfolge sein sollte. Danke, ich werde das versuchen – Midavalo

+0

Großartig, lassen Sie uns hier wissen, ob es funktioniert. – AKS

+1

danke AKS das ist genau das, was ich brauchte. Geschätzt. – Midavalo