2013-05-31 1 views
1

У меня есть две переменные:Как сортировать вложенные списки в отдельные списки с уникальными значениями в python?

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

В основном я хочу отдельные списки имен на каждом уникальное значении. Я изо всех сил пытался собрать набор вложенных для петель безрезультатно.

В идеале на выходе будет что-то вроде этого:

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

Зачем вам нужны отдельные переменные? Вместо этого используйте словарь или список. –

ответ

0

Создание переменных для каждого элемента в unique_val не является хорошей идеей. Вместо жесткого кодирования все лучше использовать dict с ключами, такими как 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]