<p>你看过那篇精彩的文章了吗?真正理解python中的模式是必不可少的。您的问题可以看作是一个图问题-查找关系基本上就是查找从子节点到父节点的所有路径。在</p>
<p>由于可能存在任意数量的嵌套(child->;parent1->;parent2…),因此需要递归解决方案来查找所有路径。在您的代码中,有2个<code>for</code>循环,这最多只会产生3级路径。在</p>
<p>下面的代码是根据上面的链接修改的,以解决您的问题。函数<code>find_all_paths</code>需要一个图形作为输入。在</p>
<p>让我们从文件创建图形:</p>
<pre><code>graph = {} # Graph is a dictionary to hold our child-parent relationships.
with open('testing.csv','r') as f:
for row in f:
child, parent = row.split(',')
graph.setdefault(parent, []).append(child)
print graph
</code></pre>
<p>对于您的样本,应该打印:</p>
^{pr2}$
<p>以下代码直接取自本文:</p>
<pre><code>def find_all_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
return [path]
if not graph.has_key(start):
return []
paths = []
for node in graph[start]:
if node not in path:
newpaths = find_all_paths(graph, node, end, path)
for newpath in newpaths:
paths.append(newpath)
return paths
for path in find_all_paths(graph, 'D', 'A'):
print '|'.join(path)
</code></pre>
<h3>输出:</h3>
<pre><code>D|B|A
D|C|A
D|C|B|A
</code></pre>