2017-10-16 99 views
-1

我有一个嵌套列表,我从数据中得到的数据将被分解成要上传到数据库的部分,但必须是单独的条目。从主嵌套列表创建多个列表

我的嵌套列表:

Master_List = [ a, [1,2,3], [1,2], d] 

但我需要将它做成六个单独的列表,如本:

list1 = [a, 1, 1, d] 
list2 = [a, 1, 2, d] 
list3 = [a, 2, 1, d] 
list4 = [a, 2, 2, d] 
etc. 

我试图通过列表通过列表的值迭代,但我很困惑,因为并不是所有的主列表都会有多个值。我该如何构建这些单独的列表以供使用?

当我试着迭代列表并创建单独的列表时,它变成了一个复杂的混乱。

编辑:Coldspeed的解决方案正是我所需要的。现在我只是使用字典来访问我想要的列表。

+0

嘛,搞什么名堂你试过迄今? –

+0

我试过遍历列表的值,但是我很困惑,因为并不是所有的主列表都会有多个值。 –

回答

0

要做到这一点,最简单的办法就是使用itertools.product

from itertools import product 
out = {'list{}'.format(i) : list(l) for i, l in enumerate(product(*Master_List), 1)} 

print(out) 
{'list1': ['a', 1, 1, 'd'], 
'list2': ['a', 1, 2, 'd'], 
'list3': ['a', 2, 1, 'd'], 
'list4': ['a', 2, 2, 'd'], 
'list5': ['a', 3, 1, 'd'], 
'list6': ['a', 3, 2, 'd']} 

不幸的是,您不能在不使用字典的情况下创建可变数量的变量。如果您要访问listX,你会访问out字典,像这样:

out['listX'] 
+0

我从来没有听说过itertools,我看了文档,解决方案的工作原理是如何需要它,访问列表1的第一个索引的例子现在写成out ['list1'] [0]。 谢谢。 –

0

一个班轮将是:

lists = sum([[[Master_List[0], i, j, Master_List[3]] for i in Master_List[1]] for j in Master_List[2]], []) 
+0

我正在寻找创建多个单独的列表,但我现在可以直接遍历新列表'列表'。谢谢。 –