Python:父子层次结构的组合

2023-12-08

对于子父关系表(csv),我尝试使用表中的所有数据收集可能的父子关系组合链。我正在尝试解决一个问题,如果存在多个子父级(参见第 3 行和第 4 行),则第二个子父级组合(第 4 行)不包含在迭代中。

数据示例:

孩子,父母

A,B
A,C
B,D
B,C
C,D

预期连锁结果:

D|B|A
D|C|B|A
D|C|A

实际连锁结果:

D|B|A
D|C|A

Code

find= 'A' #The child for which the code should find all possible parent relationships
sequence = ''
with open('testing.csv','r') as f:     #testing.csv = child,parent table (above example)
    for row in f:
        if row.strip().startswith(find):
            parent = row.strip().split(',')[1]
            sequence = parent + '|' + find
            f1 = open('testing.csv','r')
            for row in f1:
                if row.strip().startswith(parent):
                    parent2 = row.strip().split(',')[1]
                    sequence = parent2 + '|' + sequence
                    parent = parent2
        else:
            continue
        print sequence

你看过吗this精彩的文章?要真正理解 Python 中的模式,这是必不可少的阅读内容。您的问题可以被认为是一个图形问题 - 查找关系基本上就是查找从子节点到父节点的所有路径。

由于可能存在任意数量的嵌套(child->parent1->parent2...),因此您需要一个递归解决方案来查找所有路径。在你的代码中,你有 2for循环 - 正如您发现的那样,最多只会产生 3 级路径。

下面的代码改编自上面的链接以解决您的问题。功能find_all_paths需要一个图表作为输入。

让我们从您的文件创建图表:

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

对于您的示例,应该打印:

{'C': ['A', 'B'], 'B': ['A'], 'D': ['B', 'C']}

以下代码直接来自论文:

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)

Output:

D|B|A
D|C|A
D|C|B|A
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:父子层次结构的组合 的相关文章

随机推荐

  • Networkx问题:需要安装Graphviz / Pygraphviz(Anaconda 2021.11,WIN10x64)

    我在用着Jupyter Notebook进行图形分析 我需要使用Networkx要生成 MultiDiGraph 我需要将其绘制为树 但出现错误 from networkx drawing nx agraph import write do
  • gdb python:遍历结构数组

    我们不能遍历结构体数组吗 我的意思是对于每个索引 通过检查结构的内容并相应地打印每个字段 正如我们可以对这样的结构做的事情 s gdb parse and eval expr for k in s type keys v s k if is
  • 提取二进制矩阵中值为 1 的列名称

    我有个问题 我想从结构如下的二进制矩阵开始创建一个新矩阵 A B C D E F G 0 0 1 1 0 0 H 0 0 0 1 1 0 I 0 0 0 0 1 0 L 1 1 0 0 0 0 我想创建一个新矩阵由起始行的行名称和一个名为
  • WP7 - 根据设置动态更改启动页面

    是否可以根据 Windows Phone 7 应用程序中的设置更改启动页面 例如 一个有 2 个页面的应用程序 比如说电影和新闻 我希望用户能够在启动应用程序时选择他们想要首先显示的两个页面中的哪一个 现在 我试图通过在启动时导航到正确的页
  • 显示表行如何表现得像 colspan=3

    我需要两行 第一行有 3 列 第二行我需要跨越所有宽度 就像td colspan 3会做 或者显示 table cell 行为类似于 colspan 3 我在用display table row width 100 如何做呢 这是我的CSS
  • 无法将自定义标头从 WebAPI 公开给客户端

    我编写了一个程序来下载 web api 返回的 pdf word 或 txt 文件 并且工作正常 在服务器端我使用了 WebApi 和客户端 AngularJs 现在的问题是 我还需要来自 api 的文件名 为此我需要读取 api 返回的标
  • JSON 和 JSONP 有什么区别?

    格式明智 文件类型明智和实际用途明智 JSONP 是带填充的 JSON 也就是说 您在开头放置一个字符串 并在其周围放置一对括号 例如 JSON name stackoverflow id 5 JSONP func name stackov
  • AWS RDS 的 Mysqldump

    我想备份 RDS MYsql 数据库 我目前正在运行一个小实例 我需要程序来获取 sqldump 但我的问题是 RDS 在获取 sqldump 时是否会冻结 因为在其生产过程中会发生大量读 写操作 请帮忙 要回答确切的问题 获取 sqldu
  • 如何通过浏览器检测某个协议是否受支持?

    类似于 iTunes 的 链接制作器 http www apple com itunes linkmaker faq 通过网络浏览器 iTunes 网页能够查明是否itms 已在客户端工作站上注册 因此显示正确的消息 在 iTunes 中查
  • Worker 服务意外停止工作

    我有 NET Core 3 辅助服务 每 10 秒检查 一些内容 有一次 它 随机 停止这样做 我不确定为什么 到目前为止 它发生了两次 并且没有异常日志或类似的东西 所以我只能假设我应该添加一个try catch在 ExecuteAsyn
  • Android 2.3 设备上的 Android MediaPlayer 错误 (1, -38)

    最近被分配一个任务 开发一个 Android 应用程序 通过 WiFI 播放 RTSP 流 该应用程序在 SurfaceView 上使用 Android MediaPlayer 类 相同的代码适用于 Android 4 2 4 3 和 4
  • 为什么 FileWriter 不创建新文件?

    考虑以下代码 m Writer new PrintWriter new FileWriter LoginHistory dat m Writer println Integer toString s NumOfLogins m Writer
  • 如何在 ASP.NET 中从 JavaScript 触发按钮单击事件

    如何从 JavaScript 触发服务器端按钮单击事件 我尝试这样 document getElementById click 但没有用 我该怎么做 您可以将此行放在 JavaScript 函数中 doPostBack btnSubmit
  • DispatcherTimer - 如果上一个刻度仍在运行,则防止触发刻度事件

    在 Silverlight 应用程序中 我有一个代码块必须每 500 毫秒运行一次 我计划使用 DispatcherTimer 来实现此目的 请参阅下面的代码 DispatcherTimer dt new DispatcherTimer d
  • Visual Studio 更新是否会破坏 iText7?

    我在使用 iText7 7 1 6 和 Visual Studio 2019 时遇到问题 我的程序已经运行一年了 但刚刚将 Visual Studio 社区 从 16 6 1 更新到版本 16 6 2 我进行了重建 但没有更改任何内容 现在
  • Plupload HTML4 添加文件对话框在 IE 中未触发

    我正在使用 Plupload jQuery 版本 和 HTML4 for IE 由于某种原因 当我按下 添加文件 按钮时 它没有打开文件对话框 Plupload 容器被放置在一个对话框中 我调用 pluploadQueue 每次在我显示对话
  • 如何在 iOS 中计算 SHA-2(最好是 SHA 256 或 SHA 512)哈希值?

    安全服务 API 似乎不允许我直接计算哈希值 有很多公共领域和自由许可的版本可用 但如果可能的话 我宁愿使用系统库实现 数据可以通过 NSData 或普通指针访问 哈希的加密强度对我来说很重要 SHA 256 是可接受的最小哈希大小 这就是
  • 用于打印括号内整数的正则表达式

    第一次使用正则表达式 尽管 stackoverflow 中已经有很多例子 但无法让它工作 如何提取括号内字符串中的整数 Example dijdi d43 d5 55 43 32 dm dij 99 x 会回来 43 32 99 and 如
  • WPF:允许用户调整 RichTextBox 中图像的大小

    WPF 中的 RichTextBox 控件中是否有一种方法允许用户调整插入图像的大小 或者您是否必须为此设计自己的方法 我想要实现的目标如下所示 是写字板执行我想要的操作的屏幕截图 Notes 以纯文本形式读取 RTF 文件 我发现与图像大
  • Python:父子层次结构的组合

    对于子父关系表 csv 我尝试使用表中的所有数据收集可能的父子关系组合链 我正在尝试解决一个问题 如果存在多个子父级 参见第 3 行和第 4 行 则第二个子父级组合 第 4 行 不包含在迭代中 数据示例 孩子 父母 A B A C B D