Eine Datenbankabfrage mit pyodbc ergibt folgende Struktur (in Variable row):
[ ( u'STRING_A' , u'STRING_B' , u'STRING_C' , u'STRING_D ) ]
Nach meinem Verständnis ist die Struktur eine Liste [..] mit 1 Tuple (..).
Ich wollte dann die einzelnen Elemente (STRING_A, STRING_B, usw.) einem Python Dictionary
übergeben und habe bis jetzt nur den folgenden sehr komplexen Ansatz gefunden (x[0] entspricht STRING_A , x[1] entspricht STRING_B, usw.).
Gibt es einfachere Lösungen ?
(..)
row = cursor.fetchall()
..
dict = {}
dict['name'] = ''.join([x[0] for x in row])
dict['description'] = ''.join([x[1] for x in row])
dict['os'] = ''.join([x[2] for x in row])
dict['product'] = ''.join([x[3] for x in row])
Das Resultat ist dann ein dict{} mit
dict['name'] = ''STRING_A"
dict['description'] = ''STRING_B"
dict['os'] = ''STRING_C"
dict['product'] = ''STRING_D"
Parsing einer Python List mit 1 Tuple
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Was du auch mal in der Doku nachschauen könntest ist, ob pyodbc nicht direkt Dicts zurück liefern kann. Manche Datenbankanbindungen können das, AFAIR...
Gruß, noisefloor
Code: Alles auswählen
>>> liste = [('foo','bar','spam','egg')]
>>> my_dict = {}
>>> my_dict['a'], my_dict['b'], my_dict['c'], my_dict['d'] = liste[0]
>>> my_dict
{'a': 'foo', 'c': 'spam', 'b': 'bar', 'd': 'egg'}
Gruß, noisefloor
@schms: row[0] ist das erste Element Deiner Liste, und damit das Tuple, "for x in row" geht ja auch nur die Elemente der Liste durch, und da die Liste nur ein Element enthält, entspricht das so ziemlich x=row[0].
Um daraus ein Dict zu machen gibt es zip:
Um daraus ein Dict zu machen gibt es zip:
Code: Alles auswählen
data = dict(zip(['name', 'desc','os','product'], row[0]))
Heiliger Bimbam! Wie bist du denn auf so etwas gekommen?schms hat geschrieben:dict['name'] = ''.join([x[0] for x in row])
Eine leichte Vereinfachung läge darin, die Umwandlung in eine Liste sein zu lassen und einfach einen Generatorausdruck zu nehmen.
Code: Alles auswählen
dic['name'] = ''.join(x[0] for x in row)
Code: Alles auswählen
dic['name'] = row[0][0]
Eine mögliche Lösung für dein Dictionary-Problem findest du bei Stackoverflow unter "More general way of generating PyODBC queries as a dict?".