Seite 1 von 1
Simple Tupel Frage...
Verfasst: Freitag 9. November 2007, 19:40
von nemomuk
Hallo,
also ich bin Anfänger in Python und habe jetzt ein Tupel aus einer Datenbank zurückerhalten...
wenn ich jetzt den "result" ganz einfach "print"e dann bekomme ich sowas:
(('fghghjdghjthhjrzjrtzjrghjgfhjthjrtjhtzk',), ('tzkjuzlirfgnhjtzkjrthr',))
Wien nennt man sowas? Ein 2-dimensionales Tupel?
nun habe ich versucht die einzelnen Werte so abzurufen:
Code: Alles auswählen
x = ()
for i in result:
c = result[i]
x.extend(c)
for n in x:
print x[n]
Nur leider geht das nicht und zweitens ist es nicht besonders schön...
Kann man nicht irgendwie direkt auf die einzelnen Werte zugreifen? Oder wo ist mein Fehler?
Danke!
Verfasst: Freitag 9. November 2007, 19:47
von nemomuk
sehe gerade, dass ich einen logischen Fehler drin hatte...
und man tuples nicht extenden kann...
neuer Code...:
Code: Alles auswählen
x = []
for i in result:
x.extend(i)
for n in x:
print n
Nur, es besteht die Frage, ob das nicht noch einfacher geht?
Verfasst: Freitag 9. November 2007, 19:49
von Leonidas
Du hast einfach mehrere Tupel in einem Tupel verschachtelt.
Zugreifen darauf kannst du so:
SchneiderWeisse hat geschrieben:sehe gerade, dass ich einen logischen Fehler drin hatte...
und man tuples nicht extenden kann...
Ja, Tupeln sind immutable. Das heißt aber nicht, dass man auf deren Werte nicht zugreifen könnte.
Verfasst: Freitag 9. November 2007, 19:50
von nemomuk
Danke!
Ich sehe, man muss in Python etwas anders denken, aber man kann es sehr schön lösen!
Verfasst: Freitag 9. November 2007, 19:51
von windner
Das ist ein tuple, das zwei tuples enthält, die jeweils einen string enthalten.
Also:
Code: Alles auswählen
>>> x=(('fghghjdghjthhjrzjrtzjrghjgfhjthjrtjhtzk',), ('tzkjuzlirfgnhjtzkjrthr',))
>>> for e in x: print e[0]
fghghjdghjthhjrzjrtzjrghjgfhjthjrtjhtzk
tzkjuzlirfgnhjtzkjrthr
Verfasst: Freitag 9. November 2007, 21:25
von nemomuk
Danke für die Andworten!
eine Frage noch:
angenommen ich habe zwei results die als Tupel zurückgeliefert werden:
Code: Alles auswählen
result1 = ((1,),(2,),(3,))
result2 = (("user1",),("user2",),("user3",))
und ich möchte dass nach jedem Wert von result1 einer von result2 folgt...
(jetzt mal abgesehen von der "Qualität der Datenbankstruktur")
Danke!
Verfasst: Freitag 9. November 2007, 21:39
von BlackVivi
Code: Alles auswählen
In [4]: zip(result1, result2)
Out[4]: [((1,), ('user1',)), ((2,), ('user2',)), ((3,), ('user3',))]
Verfasst: Freitag 9. November 2007, 21:50
von Leonidas
Und wenn man wirklich ein Tupel hinter dem anderen haben will (d.h. ohne die zusätzlichen Tupel zu denen `zip` die Ergebnisse packt):
Und nun mit Generatoren
Code: Alles auswählen
from itertools import izip
sum((list(r) for r in izip(result1, result2)), [])
Verfasst: Samstag 10. November 2007, 08:59
von nemomuk
Danke, ich hab jetzt einfach die Methode von Blackvivi verwendet...
und habe noch ein 3. for eingebaut...
Für die, die es interessiert: und die vllt. mal die Forumssuche verwenden sollten
:
Code: Alles auswählen
result = zip(result1, result2)
print "Tupel von username und userid in 2 verschiedenen Queries:<br>", result, "<br>"
for one in result:
for two in one:
for three in two:
print three
print "<br>"