如何将嵌套列表列表转换为具有唯一数据的列表列表?

时间:2016-08-29 13:18:19

标签: python unique nested-lists

在创建参考词典和多嵌套查找列表之后,我已经决定必须有一种更简单的方法来执行此操作。我无法成为第一个进行此类转换的人。我甚至不知道从哪里开始查找解决方案的文档。

我有一个输出以下数据的系统。

initial_data = [
    [21,[[1],[2,3],[6],[7]]],
    [22,[[4,5],[6,7]],
    [23,[[1],[4,5],[6],[7]]],
    [24,[[1],[2,3,4],[6],[7]]],
]

我有另一个系统需要以下格式的数据(顺序无关紧要)。

return_data = [
    [21,[1,2,6,7]],
    [21,[1,3,6,7]],
    [22,[4,6]],
    [22,[4,7]],
    [22,[5,6]],
    [22,[5,7]],
    [23,[1,4,6,7]],
    [23,[1,5,6,7]],
    [24,[1,2,6,7]],
    [24,[1,3,6,7]],
    [24,[1,4,6,7]],
]

1 个答案:

答案 0 :(得分:3)

您可以使用生成

itertools.product
  

输入迭代的笛卡尔积。

     

大致相当于生成器表达式中的嵌套for循环。对于   例如,对于y in,产品(A,B)返回与A中的((x,y)相同的返回值   B)。

在每个子列表的第二个元素上使用它应该产生你需要的东西:

from itertools import product
[[k, p] for k, v in initial_data for p in product(*v)]

# [[21, (1, 2, 6, 7)],
#  [21, (1, 3, 6, 7)],
#  [22, (4, 6)],
#  [22, (4, 7)],
#  [22, (5, 6)],
#  [22, (5, 7)],
#  [23, (1, 4, 6, 7)],
#  [23, (1, 5, 6, 7)],
#  [24, (1, 2, 6, 7)],
#  [24, (1, 3, 6, 7)],
#  [24, (1, 4, 6, 7)]]