2016-08-05 100 views
0

遇到问题遍历元组像这样一个元组:迭代与字典里面

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) 

任何人都知道我可以保存字典值?我想看看a='a', b='b', and c={'c':'d'}

回答

2

你需要把t其他一些可迭代的容器内:

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

的问题,你的企图是对每一个从t遍历一个单一的元素,并试图解压缩。例如该回路的第一圈试图将'a'分解成三个地方(a,bc)。


显然,它也可能是更好的只是直接解压(无需环路):

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

太棒了!谢谢,把它放在列表中,就像我期待的那样。 – denvaar

1

试试这个:

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

t列表内将允许你解压它。

0

试试这个

for x in t: 
    print(x) 

x将采取一切值t反复,所以'a',然后'b'最后{'c':'d'}

,并打印正是a = 'a'等,你可以做:

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

这样做每次迭代只产生一个元组中的一个元素,并不是我所期待的。感谢您的快速回应。 – denvaar

2

你为什么迭代都当它是一个单一的tuple?只要解单tuple,如果这是你需要做的:

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

或者如果它只是打印你想要做的调用本身解压:

print(*t) 
0

您可以使用元组与多个开箱分配:

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