【问题标题】:Deletion using recursion使用递归删除
【发布时间】: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


【解决方案1】:
# Build a dict key:list of index
for i, d in enumerate(list_of_dict):
    key = d.keys()[0]
    if not key in dict_idx:
        dict_idx[key] = []
    dict_idx[key]. append(i)

# Delete from all multiple key the first 
for key in dict_idx:
    if len(dict_idx[key]) > 1:
        del list_of_dict[dict_idx[key][0]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2017-05-12
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多