Python:列表列表中项目的可能组合

时间:2017-02-25 10:19:03

标签: python nested combinations

假设我有一个如下所示的嵌套列表:

nested_list = [[a,b,1],[c,d,3],[a,f,8],[a,c,5]]

现在我希望获得列表中第二项之间的所有可能组合,但前提是两个列表中的第一项相等。那么应该打印的内容如下:

Combinations for 'a' as first item in the lists: [b,f], [b,c], [f,c]

我想出了这个:

comprehension = [x[0] for x in nested_list if x[1] in nested_list]

但这不起作用(当然)。我不确定如何遍历所有列表以找到组合。

1 个答案:

答案 0 :(得分:0)

您可以使用collectoins.defaultdictcombinations

In [2]: nested_list = [['a','b',1],['c','d',3],['a','f',8],['a','c',5]]

In [3]: from collections import defaultdict

In [4]: from itertools import combinations

In [5]: d = defaultdict(list)    

In [6]: for i, j, _ in nested_list:
   ...:     d[i].append(j)
   ...:     

In [7]: {k: list(combinations(v, 2)) for k, v in d.items()}
Out[7]: {'a': [('b', 'f'), ('b', 'c'), ('f', 'c')], 'c': []}