2017-03-09 42 views
0

這是爲什麼返回in sort_tup_from_list for key, val in tup: ValueError: not enough values to unpack (expected 2, got 1)解壓Python3中的iterables?

# list with tuples 
lst = [("1", "2"), ("3", "4")] 

# sorting list by tuple val key 
def sort_tup_from_list(input_list): 
    tmp = [] 
    print(tup) 
    for tup in input_list: 
     for key, val in tup: 
      tmp.append((val, key)) 
      tmp.sort(reverse=True) 
    return tmp 

print(sort_tup_from_list(lst)) 

當我註釋掉第二for循環,它打印元組:

lst = [("1", "2"), ("3", "4")] 
def sort_tup_from_list(input_list): 
    tmp = [] 
    for tup in input_list: 
     print(tup) 
     # for key, val in tup: 
     #  tmp.append((val, key)) 
     #  tmp.sort(reverse=True) 
    return tmp 

print(sort_tup_from_list(lst)) 

輸出:

('1', '2') 
('3', '4') 
[] 

因此,元組在那裏。他們爲什麼不拆包自己?

+1

因爲你遍歷'tup'。 'tup'的元素是單個字符串。如果你輸入了兩個字符串,他們會用兩個字符解包變量。 –

+0

你是對的!添加兩個字符的字符串按預期工作,但這不是我想要的。問題解決了;) –

回答

3

你的第二個for循環是遍歷元組中的項目,但是你抓取了它中的兩個項目。我認爲這是你想要的:

# list with tuples 
lst = [("1", "2"), ("3", "4")] 

# sorting list by tuple val key 
def sort_tup_from_list(input_list): 
    tmp = [] 
    print(tmp) 
    for key,val in input_list: 
     tmp.append((val, key)) 
     tmp.sort(reverse=True) 
    return tmp 

print(sort_tup_from_list(lst)) 
+0

是的,謝謝。我現在看到循環遍歷元組時,我只能有一個迭代 –