2016-08-05 33 views
0

Problem haben, über Tupel wie diese Iterieren:Iterate ein Tupel mit dict innerhalb

t = ('a','b',{'c':'d'}) 

for a,b,c in t: 
    print(a,b,c) # ValueError: not enough values to unpack (expected 3, got 1) 

for a,b,*c in t: 
    print(a,b,c) # ValueError: not enough values to unpack (expected 2, got 1) 

for a,b,**c in t: 
    print (a,b,c) # Syntax error (can't do **c) 

Wer weiß, wie ich das Wörterbuch Wert erhalten kann? Ich möchte a='a', b='b', and c={'c':'d'}

Antwort

2

sehen Sie bräuchten t innerhalb einer anderen iterable Behälter setzen:

for a, b, c in [t]: 
    print(a, b, c) 

das Problem bei der Versuche ist, dass jeder auf von t über ein einzelnes Element iteriert und zu versuchen, entpacke das. z.B. Die erste Umdrehung der Schleife versucht, 'a' in drei Plätze (a, b und c) auszupacken.


Offensichtlich ist es auch wahrscheinlich besser, nur direkt entpacken (keine Schleife erforderlich):

a, b, c = t 
print(a, b, c) 
+0

Großartig! Danke, es in eine Liste zu setzen, funktioniert so, wie ich es erwartet hatte. – denvaar

1

Try this:

for a,b,c in [t]: 
    print(a,b,c) 

Putting t in einer Liste ermöglicht es Ihnen, entpacken es.

0

versuchen diese

for x in t: 
    print(x) 

x iterativ alle Werte in t nehmen, so 'a', dann 'b' und schließlich {'c':'d'}.

Und drucken genau a = 'a' usw. Sie tun können:

for param, val in zip(["a","b","c"], t): 
    print(param,"=",val) 
+0

Wenn Sie so vorgehen, wird pro Iteration nur ein Element im Tupel erzeugt, und es ist nicht ganz das, wonach ich gesucht habe. Danke für die schnelle Antwort. – denvaar

2

Warum sind Sie Iterieren überhaupt, wenn es sich um eine einzelne tuple ist? entpacken Sie einfach die einzelnen tuple, wenn es das ist, was Sie tun müssen:

a, b, c = t 
print(a, b, c) 

Oder wenn es nur Drucken Sie in dem Aufruf entpacken tun wollen selbst:

print(*t) 
0

Sie Tupel Auspacken mit mehreren verwenden können Auftrag:

a, b, c = t 
print(a, b, c)