Próbuję policzyć klawiszy "Nazwa" w tej zagnieżdżonej liście, a ja otrzymuję 3 na miejscu 6, myślę, że mój problem jest z obudową podstawową w funkcji rekurencyjnej Count_elem (Drzewo)

def define_tree3():
    tree3 ={'name':'GAS','grade':0.8,'children':[{'name':'CSA','grade':0.5,'children':[{'name':'MB','grade':0.1},{'name':'TA','grade':0.6}]},{'name':'IIW','grade':0.9,'children':[None,{'name':'IP','grade':0.99}]}]}
    return tree3

#this fuction is to delete the given key from the given dict and retur the new dict
def delkey(dict1,key):
    d=dict(dict1)
    del d[key]
    return d

#this function is to count the numbers of 'name'
def count_elem(tree):
    if len(tree)==0:
        return 0
    else:
        for i in tree:
            if i == None:
                return 0
            elif i == 'name':
                return 1+ count_elem(delkey(tree,i))
            elif i == 'grade':
                return count_elem(delkey(tree,i))
            elif i == 'children':
                for j in tree[i]:
                    if j == None:
                        continue
                    else:
                        return count_elem(j)

a=define_tree3()
print(count_elem(a))

0
jawad2000 10 październik 2020, 23:53

1 odpowiedź

Najlepsza odpowiedź

To nie jest odpowiedź na twoje pytanie. Próbowałem go rozwiązać i użyłem innego podejścia. Może być przydatny jako odniesienie.

tree3 = {'name':'GAS','grade':0.8,'children':[{'name':'CSA','grade':0.5,'children':[{'name':'MB','grade':0.1},{'name':'TA','grade':0.6}]},{'name':'IIW','grade':0.9,'children':[None,{'name':'IP','grade':0.99}]}]}

def count_name(entity):
    count = 0
    name = 'name'
    # print('\n')
    # print(count, entity)

    if type(entity) == dict:
        count += sum([key == name for key in entity.keys()])
    
        for value in entity.values():
            # print(count, value)

            if type(value) == list:
                count += sum([count_name(member) for member in value])

    return count

count_name(tree3)
0
nocibambi 10 październik 2020, 21:40