所以我试图找到一种方法来“合并”一个在python中以字典形式出现的依赖列表,但我还没有找到解决方案.因此,想象一下沿着这条线的图形:(所有的线都是这个有向图中的向下箭头)
1 2 4
\ / / \
3 5 8
\ / \ \
6 7 9
{3:[1,2],5:[4],6:[3,5],7:[5],8:[4],9:[8],1:[],2:[],4:[]}
这样键是图中的节点,它们的值是它们所依赖的节点.
我试图将它转换为树的总祖先列表,以便每个节点都是一个键,它的值是一个通向它的所有节点的列表,而不仅仅是它的直接父节点.结果字典将是:
{3:[1,5,1,2,4],7:[5,9:[8,3:[]}
最佳答案
您可以使用链式字典理解和最多两个节点的列表解析.
>>> {k: v + [item for i in v for item in d.get(i,[])] for k,v in d.items()}
{3: [1,5: [4],6: [3,7: [5,8: [4],9: [8,1: [],2: [],4: []}
对于无限深度,您可以使用递归方法
def get_ant(node,d):
if node:
return d.get(node,[]) + [item for x in d.get(node,[]) for item in get_ant(x,d) ]
return []
然后,
>>> get_ant(6,d)
[3,10,4]
获得所有案件:
>>> {k: get_ant(k,d) for k in d.keys()}
{3: [1,10],1: [10],4: []}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。