gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:19:00 25 4
gpt4 key购买 nike

所以我试图找到一种方法来“合并”一个依赖列表,它在 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,2], 5:[4], 6:[3, 5, 1, 2, 4], 7:[5, 4], 8:[4], 9:[8, 4], 1:[], 2:[], 3:[]}

关于如何解决这个问题有什么建议吗?我已经投入了一段时间,尝试了一个我无法开始工作的递归解决方案。

最佳答案

您可以将链式 dict comprehensionlist comprehension 一起用于最多两个节点。

>>> {k: v + [item for i in v for item in d.get(i, [])] for k,v in d.items()}

{3: [1, 2],
5: [4],
6: [3, 5, 1, 2, 4],
7: [5, 4],
8: [4],
9: [8, 4],
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, 5, 1, 2, 10, 4]

获取所有案例:

>>> {k: get_ant(k, d) for k in d.keys()}

{3: [1, 2, 10],
5: [4],
6: [3, 5, 1, 2, 10, 4],
7: [5, 4],
8: [4],
9: [8, 4],
1: [10],
2: [],
4: []}

关于python - 通过合并匹配键和键值对来折叠字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com