【发布时间】:2017-11-13 10:22:54
【问题描述】:
我有以下由嵌套字典组成的树状结构。每个字典都有一个元组作为键,并包含一个字典列表。该列表可以为空。
{(0, 26): [{(2, 9): [{(4, 7): []},
{(6, 9): []},
{(2, 5): []},
{(5, 8): []},
{(3, 6): []},
{(2, 7): [{(4, 7): []}, {(2, 5): []}, {(3, 6): []}]},
{(3, 8): [{(4, 7): []}, {(5, 8): []}, {(3, 6): []}]}]},
{(14, 27): [{(14, 17): []},
{(17, 20): []},
{(18, 21): []},
{(20, 23): []},
{(22, 25): []},
{(17, 21): [{(17, 20): []}, {(18, 21): []}]}]},
{(8, 16): [{(12, 16): []},
{(8, 11): []},
{(10, 16): [{(12, 16): []}]},
{(9, 12): []}]},
{(7, 14): [{(7, 12): [{(7, 10): []},
{(8, 11): []},
{(9, 12): []}]},
{(7, 10): []},
{(8, 11): []},
{(9, 12): []}]},
{(1, 4): []}]}
我正在尝试删除可能包含在其他词典中的词典。如果“深度 d”处的字典有一个字典列表,该字典具有在“深度 d-1”处找到的键,我希望例程删除“深度 d-1”处的字典。 例如,键为 (2,9) 的字典包含键为 (4,7) 的字典。该字典实际上包含在同一字典中的其他两个字典中,键为 (2,7) 和 (3,8)。我想编写一个例程以获得以下结果......这里我只是显示带有键(2,9)的字典的结果:
{(2, 9): [{(6, 9): []},
{(2, 7): [{(4, 7): []}, {(2, 5): []}, {(3, 6): []}]},
{(3, 8): [{(4, 7): []}, {(5, 8): []}, {(3, 6): []}]}]},
我在想我应该能够使用递归来做到这一点,但我没有成功。这可以通过递归解决吗?如果没有,有什么更好的解决方法?
【问题讨论】:
-
那么,列表的内容重要吗?还是你只是按键删除?另外,为了确认一下,如果一个条目的深度为 d,那么所有深度为 d - 1 和更小的条目都将被删除?
-
你能告诉 use 你到底想做什么吗?目前尚不清楚您的例程需要做什么。
-
列表可以包含其他字典。如果一个列表包含一个字典,其键在深度 d-1 处找到,那么我们希望删除深度 d-1 处的条目(但不是深度 d 处的条目)。是的,关于你的最后一个问题。
-
@marcos: 所以如果我有
(4, 5): []在深度d和(4, 5) : [..... ] # non-empty在深度d - 1,这会被删除吗? -
好问题!只会发生相反的情况。也就是说,我在深度 d-1 (4,5):[ ] 和深度 d (4,5):[.....] #non-empty
标签: python dictionary recursion