2016-08-05 138 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)