2016-11-11 1 views
2

Ich habe eine Hauptdatenquelle, bestehend aus einer Liste von Listen und einem Wörterbuch von Tupeln, die die Informationen, die ich brauche aus der Hauptdatenquelle indiziert.Python kombiniert Informationen in einer Liste von Listen mit Indizes in einem Tupel

Ich möchte das Wörterbuch der Tupel verwenden, um jeden Eintrag aus der Hauptdatenquelle zu indizieren und eine neue Liste mit diesen Informationen zu erstellen.

Ich habe den Code unten erstellt, aber die der Fehler sagt „Typeerror: Liste Indizes müssen ganze Zahlen sein, nicht-Generator“

Ich habe gesucht, wie durch jede Liste in einer Liste von Listen zu durchlaufen, aber noch nicht gefunden die Lösung.

Alle Vorschläge willkommen.

#List of data 
MyDat = [['round', 'square', 'oblong', 'circle', 'round'],['orange','orange','purple','green','yellow'], ['rough','rough','smooth','rough','smooth']] 

#Tuples required to create new list of variable combinations 
tupDict = {"stage1": (0,2), "stage2": (1,)} 

newList = [] 

for i in tupDict: 
     newList.append(MyDat[(x for x in tupDict[i])]) 

print(newList) 

Die neue Liste soll eine neue Liste von Listen der Spalten in der MyDat ausgewählt erstellen. Zum Beispiel:

Stage1: (0,2) 

würde diese Liste

[['round', 'square', 'oblong', 'circle', 'round'], ['rough','rough','smooth','rough','smooth']] 
+0

Sieht aus wie ich und @MdMahfuzurRahman verschiedene Fragen beantworten. Können Sie hinzufügen, was Sie in newList sehen möchten? (tatsächliche Daten, die nach dem Ausführen gültigen Code auf Daten im Beispiel vorhanden sein sollten) – Arnial

+0

@RoryDaulton danke ja das war ein Tippfehler. Es sollte auch "Wörterbuch der Tupel im zweiten Absatz" lesen. Ich werde bearbeiten. – alkey

Antwort

1

erstellen Wenn ich richtig verstehe können Sie wie folgt versuchen:

MyDat = [['round', 'square', 'oblong', 'circle', 'round'],['orange','orange','purple','green','yellow'], ['rough','rough','smooth','rough','smooth']] 

#Tuples required to create new list of variable combinations 
tupDict = {"stage1": (0,2), "stage2": (1,)} 

newList = [] 

for i in tupDict: 
    newList.extend([MyDat[x] for x in tupDict[i]]) 

print(newList) 

Ich habe gerade diese Zeile:

newList.append(MyDat[(x for x in tupDict[i])]) 

Dazu:

newList.extend([MyDat[x] for x in tupDict[i]]) 

In dieser Zeile: newList.append(MyDat[(x for x in tupDict[i])]) Sie ein tuple als Index der MyDat verwenden. Aber integer wird benötigt.

+0

Danke, das habe ich versucht zu erreichen. Ich habe jedoch Ihre Antwort bearbeitet, um die Variable newList jedes Mal neu einzustellen. – alkey

1
for i in tupDict: 
    tmp = MyDat # temporary variable to store data by current index 
    for x in tupDict[i]: # iterate over indexes in tuple 
     tmp = tmp[ x ] # set tmp to data by index 

    newList.append(tmp) #we finish iterating over index, now tmp hold value that we need 

Auch soll ich erwähnen, dass die Reihenfolge der Elemente in newList kann variieren, da dict die Elemente nicht speichern, um.

Wenn Sie Elemente in newList in der gleichen Reihenfolge wie im Code definieren möchten, sollten Sie OrderedDict von collections Modul verwenden.

Verwandte Themen