2017-06-11 3 views
1

Ich bekomme derzeit eine Ausgabe von A, A, B, B anstelle von A, B, A, B.Python-Arrays in einer Schleife zusammenführen?

Ich möchte wirklich die Werte der einzelnen Tabellenkopf mit jeder Tabelle Datenelement (wie ein Wörterbuch) zuordnen.

import requests 
from bs4 import BeautifulSoup 

courseCode = "IFB104" 
page = requests.get("https://www.qut.edu.au/study/unit?unitCode=" +  courseCode) 

soup = BeautifulSoup(page.content, 'html.parser') 
table = soup.find_all(class_='table assessment-item') 

numOfTables = 0 
tableDataArray = [] 

for tbl in table: 
    numOfTables = numOfTables + 1 
    tableDataArray += [tbl.find_all('th'),tbl.find_all('td')] 
+0

Können Sie ein Beispiel dafür angeben, wie die Tabelle aussieht und welche Ausgabe gewünscht wird? –

+0

Er druckt derzeit '3 [[ Namen, Beschreibung, Gewichtung, Fälligkeit, Interne oder externe, Gruppe oder einzelne, Bezieht sich auf das Lernen] Ziele [ # 3 : Quiz/Test, Wöchentliche Quiz. In den Vorlesungen werden Sie jede Woche in die Grundlagen der Informatik einführen, um technische Probleme zu lösen. Ihr Verständnis dieser Techniken wird durch wöchentliche Online-Tests und Tests getestet, percnt;, Während Semester, Interne, Einzelne, 1,2]] ' – yeeeeee

+0

Es all die Tags aus dieser Tabelle druckt (eine der Tabellen drei in der gesamten HTML-Seite), und dann alle die Tags). Ich möchte ein Wörterbuch (ich sagte ursprünglich Array, aber ein Wörterbuch ist besser) zu jedem mit jedem machen. Auf diese Weise kann ich den Namen des Assessments aufrufen und "# 3: Quiz/Test" oder "Wiegen" und "25%" erhalten. – yeeeeee

Antwort

1

Wenn ich das richtig verstanden, Sie müssen dict statt Liste verwenden:

import requests 
from bs4 import BeautifulSoup 

courseCode = "IFB104" 
page = requests.get("https://www.qut.edu.au/study/unit?unitCode=" + courseCode) 

soup = BeautifulSoup(page.content, 'html.parser') 
table = soup.find_all(class_='table assessment-item') 

numOfTables = 0 
tableFormatted1 = [] 
tableFormatted2 = {} 

for tbl in table: 
    numOfTables = numOfTables + 1 
    keys = tbl.find_all('th') 
    values = tbl.find_all('td') 
    new_data = dict(zip(keys, values)) 

    # Method 1 
    tableFormatted1.append(new_data) 

    # Method 2 
    for k, v in new_data.items(): 
     if k in tableFormatted2: 
      tableFormatted2[k].append(v) 
     else: 
      tableFormatted2[k] = [v] 

print('List of dictionaries') 
print(tableFormatted1) 
print('') 

print('Dictionary with list') 
print(tableFormatted2) 

Edited:

Jede Iteration von tbl wird das Überschreiben der Iteration bereits getan. Also ist es notwendig, die Struktur zu ändern. Ich habe gerade zwei Methoden zur Verfügung gestellt.

+0

Fast perfekt! Außer mir wurde klar, dass ich es für alle drei Tische machen muss, nicht nur für einen. Mein ursprünglicher Beitrag hatte einen Fehler bei der Eingabe von 'tableDataArray = ...' statt '+ ='. Es sollte durch 3 Tabellen iterieren .... brechen es auf , Ebene. – yeeeeee

+0

Ok. Nur bearbeiten. – Rafael

+0

Aber es gibt ein Problem. Die Tasten sind gleich ('Name' kann' Portfolio', 'Prüfung (geschrieben)' oder 'Quiz/Test' sein. Benötigen Sie einen Schlüssel mit einer Liste für alle Werte? – Rafael

Verwandte Themen