【发布时间】:2022-11-19 21:01:09
【问题描述】:
我希望对说明依赖关系的字符串列表进行排序(通过 PC 算法确定的贝叶斯网络的结构)。
例如
verbose_struct = ['A', 'C|A,E', 'E', 'B|C,D', 'D']
sorted_struct = ['A', 'E', 'D', 'C|A,E', 'B|C,D']
字符串的顺序取决于之前是否列出了依赖项(分隔符“|”之后的字母,例如 B 依赖于 C 和 D)。如上所示,'E' 应位于 'C|A,E' 之前,因为 C 依赖于 E。没有依赖性的字符串应位于所有具有依赖性的字符串之前,例如'C|A,E' 和 'B|C,D' 之前的 'D'。
我该怎么做?
我已经设法使用以下命令根据它们是否具有依赖关系来对字符串进行排序:
sorted_struct = sorted(verbose_struct, key=lambda x: len(x.split('|')))
我不确定如何根据变量的依赖关系进一步对变量进行排序,因为我对 Python 中的 lambda 函数相当不熟悉。
【问题讨论】:
-
将所有带有竖线定界符的项目(无论字符串是什么)移到排序的前面,将带有竖线的项目移到排序的末尾是否足够,或者是否还需要其他东西? ... 哦,我想我在这里回答了我自己的问题。
C是一个没有单独定义的元素的例子,但是需要在对C的依赖之前。 -
不幸的是没有。正如您所注意到的,C 没有单独定义,但必须出现在 D 之前,因为 D 依赖于 C。在我程序的其他方面,使用此结构来确定概率,因此 C 需要在 D 之前,否则找不到 C 的值。
-
您的经验水平如何?您是否愿意定制
class? -
您将如何对
['A|B', 'B|C', 'C|A']进行排序? -
@AirSquid 我很乐意上课,是的。在像上面那样转换为字符串数组之前,数据存储在嵌套字典中,这样每个子字典要么为空(没有父项),要么具有父项值 - 例如
A: {}, C: {'parents': [A,E]}。如果那会有所帮助。尽管在谷歌搜索后显然字典没有顺序,因此在我将它们转换为字符串格式 ('C|A,E') 之前无法排序
标签: python python-3.x sorting bayesian-networks