2013-05-31 30 views
1

我有兩個變量:如何使用python中的唯一值將嵌套列表排序爲單獨的列表?

unique_val = [1,2,3] 
nested_list = [['name1',1],['name2',1],['name3',3],['name4',2],['name5',2],['name6',3]] 

基本上我想在每個唯一值的名稱單獨列出。我努力拼湊一套嵌套for循環無濟於事。

理想情況下,輸出會是這樣的:

list_1 = ['name1','name2'] 
list_2 = ['name4','name5'] 
list_3 = ['name3',name6'] 
+1

爲什麼要分開變量?改用字典或列表。 –

回答

0

unique_val創建變量對每個項目是不是一個好主意。而不是硬編碼的一切更好地使用像list_1鍵的字典,因爲它會處理任何數量的變量。

>>> from collections import defaultdict 
>>> dic = defaultdict(list) 
>>> nested_list = [['name1',1],['name2',1],['name3',3],['name4',2],['name5',2],['name6',3]] 
>>> unique_val = [1,2,3]  #better make this a set to get O(1) lookup 
>>> for v,k in nested_list: 
     if k in unique_val: 
      dic['list_'+str(k)].append(v) 

#now access those lists: 

>>> dic['list_1'] 
['name1', 'name2'] 
>>> dic['list_2'] 
['name4', 'name5'] 
>>> dic['list_3'] 
['name3', 'name6'] 

如果你曾在unique_val 4,那麼你可能希望list_4是一個空列表,這是很容易處理的defaultdict

>>> dic['list_4'] 
[] 
+0

這工作非常好,謝謝! –

+0

@ sTr8_Struggin很高興幫助。 –

0

您可以使用列表理解:

[[name for name, number in nested_list if number == n] for n in unique_val] 

如果你真的想把它放在單獨的變量,你可以做到以下幾點。

list_1, list_2, list_3 = [[name for name, number in nested_list if number == n] for n in unique_val] 
相關問題