首页 > 解决方案 > 如何在python中从目标数据跟踪到源数据?

问题描述

我想遍历列表/字典中的每个数据 - 在下面的输入中

{mapping1: [(b,c),(a,b),(c,d)],mapping2: [(a,b),(b,c),(e,f),(d,e),(c,f)]}

对于映射 1 d 是目的地和存在源

对于映射 2:f 是目的地,a 和 d 是源。

因此,此链接或跟踪可能会有所不同。

以下是我的输入

{mapping1: [(b,c),(a,b),(c,d)],mapping2: [(a,b),(b,c),(e,f),(d,e),(c,f)]}

输出是:

在此处输入图像描述

标签: pythonlistdictionarypython-3.7traversal

解决方案


您可以利用 DAG 概念,找到没有出度的节点,即目标,以及没有入度的节点,即源

对于 python,我使用 networkx 来构建 DAG 和 matplotlib 来绘制和保存映射。

pip install networkx matplotlib

您可以将映射添加到 inputList 变量。只需确保将其作为字符元组列表提供即可。输出将是g2.png与脚本位于同一目录中的文件

import networkx as nx
from numpy import add

inputList = [('a', 'b'), ('b', 'c'), ('e', 'f'), ('d', 'e'), ('c', 'f')]
invertPairs =[]
for x,y in inputList:
    invertPairs.append((y,x))

g2 = nx.DiGraph()
g2.add_edges_from(invertPairs)
plt.tight_layout()
nx.draw_networkx(g2, arrows=True)
plt.savefig("g2.png", format="PNG")
plt.clf()

输出

输出


推荐阅读