1

我有两个变量:

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']
4

2 回答 2

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']

如果您有一个 4 ,unique_val 那么您可能希望list_4是一个空列表,这很容易由 a 处理defaultdict

>>> dic['list_4']
[]
于 2013-05-31T16:46:13.983 回答
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]
于 2013-05-31T16:48:42.293 回答