我有两个变量:
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']
答案 0 :(得分:0)
为unique_val
中的每个项目创建变量不是一个好主意。而不是硬编码一切都更好地使用像list_1
这样的键的dict,因为它将处理任意数量的变量。
>>> 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']
[]
答案 1 :(得分: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]