2017-12-07 1 views
0

Ich habe ein benanntes Tupel-Objekt mit 63 verschiedenen Elementen definiert. Ich benutze die _make-Funktion. Ich denke, dass dieser Ansatz funktioniert, aber 4x63 mehr Zeilen für den Versuch außer den Aussagen benötigt. Es muss einen besseren Weg geben:Einfachere Möglichkeit, riesige Listen zum Erstellen benannter Tupel mit Standardwerten zu schreiben

AssetRow = collections.namedtuple('AssetRow', [ 
    "status", 
    "computer_name", 
    . 
    . 
    . 
    61 more 


def create_asset_row(Object): 
    try: 
     Object.status 
    except 
     Object.status = "" 
    try: 
     Object.computer_name 
    except 
     Object.computer_name= "" 
    values = [ 
     Object.status, 
     Object.computer_name, 
     . 
     . 
     . 
     61 more 
    ] 
    row = AssetRow._make(values) 

im Grunde möchte ich den Namen Tupel, um sicherzustellen, ist auf „“, wenn ich darin keinen Wert haben zu setzen .... aber ich weiß nicht möchte 500 Zeilen schreiben, um es zu tun ... Ich möchte über 67 Zeilen schreiben

Antwort

1

Würde so etwas funktionieren? Ich bin nicht sehr vertraut mit der Klasse.

names = ["status", "computer_name"] 
AssetRow = collections.namedtuple('AssetRow', names) 


def create_asset_row(Object): 
    values = [getattr(Object, name, "") for name in names] 
    row = AssetRow._make(values) 
+1

Ich würde vorschlagen, das Standardargument 'getattr' zu verwenden: 'getattr (Object, name," ")'. Ersetzen Sie '' '' bei Bedarf mit einem 'name' spezifischen Standard. Da dies näher am OP-Code ist. –

+0

Danke, das hatte ich auch gedacht, aber vergessen, es rein zu lassen – bphi

Verwandte Themen