您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 通过合并匹配的键和键,值对来折叠字典

5b51 2022/1/14 8:21:32 python 字数 2323 阅读 497 来源 www.jb51.cc/python

所以我试图找到一种方法来“合并”一个在python中以字典形式出现的依赖列表,但我还没有找到解决方案.因此,想象一下沿着这条线的图形:(所有的线都是这个有向图中的向下箭头)1 2 4 \ / / \ 3 5 8 \ / \ \ 6 7 9 此图将生成一个如下所示的依赖关系字典:{3:[1,2], 5:[4]

概述

所以我试图找到一种方法来“合并”一个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: []}

总结

以上是编程之家为你收集整理的python – 通过合并匹配的键和键,值对来折叠字典全部内容,希望文章能够帮你解决python – 通过合并匹配的键和键,值对来折叠字典所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶