2016-05-31 5 views
0

Ich bin ein Python Anfänger und ich versuche zu lernen, wie man das optimal macht. Ich habe eine Liste von wenigen dicts zusammengestellt. Ich habe die Funktion, einen Wert zu suchen und das gesamte Diktat zurückzugeben, wenn es gefunden wird. # Ich bin auch nicht so stolz auf mein Anderes ... Es wird dann eine Tabelle mit einer Spalte mit den Schlüsseln und einer mit den Werten gedruckt.Python optimale Möglichkeit, dict in HTML-Tabelle zu schreiben

car1 = {'brand':'skoda','model':'fabia','color':'blue'} 
car2 = {'brand':'opel','model':'corsa','color':'red'} 
car3 = {'brand':'Audi','model':'a3','color':'black'} 
list = [car1,car2,car3] 


def getProp(value,carList): 
    for elements in carList: 
     for i in elements.itervalues(): 
      if value.lower() == i.lower(): 
       return elements 
      else: 
       # empty dict 
       return elements.fromkeys(elements,'') 

def printTable(dic): 
    html = '<table border=1> < th> CAR </th> <th>PROPERTIES </th>' 

    for i in dic.iterkeys(): 
     html+='<tr> <td> %s </td> <td> %s </td> </tr>' %(i,dic[i]) 

    html+='</table>' 
    print html 

properties = getProp('Opel',list) 
print properties 
printTable(properties) 
+0

Ich habe eine Verbesserung für Ihre Frage: Bitte korrigieren Sie den Einzug Ihres Codes – qvpham

+1

Und was genau ist Ihre Frage? Ist Ihre Frage der Titel oder der Inhalt Ihrer Frage? Was funktioniert nicht, oder genauer gesagt, was wollen wir reparieren? – Torxed

+0

Setzen Sie einige '' print'' Anweisungen/Funktionen in '' 'für i in elements.itervalues ​​():' '' loop suite um zu sehen was passiert. – wwii

Antwort

1

Da Sie scheinen für die Code-Vorschläge hier zu suchen, ist mein

1) Definieren Sie keine Datenstruktur über mehrere Variablen, eine einzelne Verbindung Datenstruktur verwenden;

2) Schreiben Sie den Raw-HTML-Code nicht selbst, sondern verwenden Sie eines der vielen Python-HTML-Hilfsmodule.

Kombination meine Vorschläge oben, ich komme mit der folgenden Nacharbeit (Warnung, Python3 statt Python2 wie die original):

from webhelpers2.html import HTML 

cars = { 
    'car1': {'brand': 'skoda', 'model': 'fabia', 'color': 'blue'}, 
    'car2': {'brand': 'opel', 'model': 'corsa', 'color': 'red'}, 
    'car3': {'brand': 'Audi', 'model': 'a3', 'color': 'black'} 
    } 

def getProp(carValue, carList): 

    for car, dic in carList.items(): 

     for value in dic.values(): 

      if carValue.lower() == value.lower(): 
       return dic 

    # else return empty dict 
    return {}.fromkeys(carList['car1'], '') 

def printTable(dic): 

    print(HTML.tag('html', 
     HTML.tag('body', 
      HTML.tag('table', 
       HTML.tag('tr', 
        HTML.tag('th', 'CAR'), HTML.tag('th', 'PROPERTIES') 
        ), 
       *[HTML.tag('tr', 
        HTML.tag('td', key), HTML.tag('td', value) 
        ) for key, value in dic.items()] 
       ) 
      ) 
     ) 
    ) 

properties = getProp('Opel', cars) 
print(properties) 
printTable(properties) 

Andere Leute werden natürlich haben zusätzliche/verschiedene Vorschläge.

+0

Ok vielen Dank für Ihren Vorschlag, ich wusste nicht über diese Art des Schreibens von HTML-Code. Haben Sie auch einen Vorschlag etwas besser zu machen, wenn der Suchwert nicht gefunden wird? else-Anweisung in getProp –

Verwandte Themen