Python 在嵌套图中查找所有路径

Python 在嵌套图中查找所有路径,python,graph,path,Python,Graph,Path,我一直在努力寻找一个相对简单问题的解决方案 给定一个图g: g = {'A': ['B', 'C'], 'B': ['A', 'C'], 'C': ['D'], 'D': [], } 使用此解决方案(我找到了)可以找到所有路径: 为了使事情更复杂,我想在g中查找所有路径,但当列表嵌套时。例如,以g为例 g2 = {'A': [['B', 'C'],['D']], 'B': [['A'], ['C']], 'C': [['D']],

我一直在努力寻找一个相对简单问题的解决方案

给定一个图g:

g = {'A': ['B', 'C'],
     'B': ['A', 'C'],
     'C': ['D'],
     'D': [],
     }
使用此解决方案(我找到了)可以找到所有路径:

为了使事情更复杂,我想在g中查找所有路径,但当列表嵌套时。例如,以g为例

g2 = {'A': [['B', 'C'],['D']],
     'B': [['A'], ['C']],
     'C': [['D']],
     'D': [[]]}
我正在寻找的解决办法是

[ [['A', 'B', 'C', 'D'], ['A', 'C', 'D']], ['A', 'D'] ] 
其中,前两条路径被分组在一起(即,总的来说,我希望得到两条路径)。然而,上述功能是不够的。我已经尝试将此代码调整为适合我的问题,但没有成功

我正在使用的实际图形相当大,字典中的许多元素都是这些嵌套列表,因此路径的数量可能会增长得相当快

我希望这个例子有意义。任何帮助都将不胜感激

>>> {key:[ele for lst in value for ele in lst] for key, value in g2.iteritems()}
{'A': ['B', 'C', 'D'], 'C': ['D'], 'B': ['A', 'C'], 'D': []}
在我看来,这会解决你的问题

或者,在没有听写和列表理解的情况下:

result = {}
for key, value in g2.iteritems():
    result[key] = []
    for lst in value:
        for ele in lst:
            result[key].append(ele)
如果要通过原始图形对结果进行排序
g2

# Sort by 2nd value in list
res = []
for lst in g2['A']:
    res.append([])
    for reslst in res:
        if reslst[1] in lst:
            res[-1].append(reslst)
    if len(res[-1]) == 0:
        res.pop()

[[['A', 'B', 'C', 'D'], ['A', 'C', 'D']], [['A', 'D']]]
在我看来,这会解决你的问题

或者,在没有听写和列表理解的情况下:

result = {}
for key, value in g2.iteritems():
    result[key] = []
    for lst in value:
        for ele in lst:
            result[key].append(ele)
如果要通过原始图形对结果进行排序
g2

# Sort by 2nd value in list
res = []
for lst in g2['A']:
    res.append([])
    for reslst in res:
        if reslst[1] in lst:
            res[-1].append(reslst)
    if len(res[-1]) == 0:
        res.pop()

[[['A', 'B', 'C', 'D'], ['A', 'C', 'D']], [['A', 'D']]]

有什么理由不干脆把名单平铺一下吗?
{'A':['B','C','D']}
会在您的示例中给出所需的结果吗?如果没有,又有什么不同呢?有没有什么理由不干脆把这些列表展平?
{'A':['B','C','D']}
会在您的示例中给出所需的结果吗?如果没有,区别是什么。展平并插入到生成器中会产生3条路径([['A',B',C',D'],['A',C',D'],['A',D']]),但我需要将前两条路径分组为一条路径。@Chewbaccabaca我添加了一个解决方法。。。虽然不漂亮,但很简单。谢谢你的回复。如果我将原始g2与嵌套列表一起使用,这实际上对我不起作用。展平并插入到生成器中会产生3条路径([['A'、[B'、[C'、[D']、['A'、[C'、[D']、[A'、[D']),但我需要将前两条路径分组到一条路径中。@chewbaccabacca我添加了一个解决方法。。。虽然不漂亮,但很简单。谢谢你的回复。如果我将原始g2与嵌套列表一起使用,这实际上对我不起作用。