2015-06-25 1 views
0

В приведенном ниже коде я хочу элементы листа из dict.Почему Нет добавляется в список

group_children_map={'Mould': ['Yeast'], 'Living Organism': ['Animal', 'Plant', 'Mould'], 'Animal': ['Lion', 'Tiger', 'Cat', 'DOG'], 'Plant': ['Tulsi', 'Hibiscus', 'Aloe Vera']} 
print group_children_map 
node='Living Organism' 
leaf_list=[] 
def find_leaf(node): 
    try_leaf=group_children_map.get(node) 
    if try_leaf is None: 
     #print node 
     return node 
    else: 
     print try_leaf,"list" 
     for l in try_leaf: 
      #print l 
      leaf_list.append(find_leaf(l)) 

find_leaf(node) 

print leaf_list 

Ожидаемый результат:

['Lion', 'Tiger', 'Cat', 'DOG', 'Tulsi', 'Hibiscus', 'Aloe Vera', 'Yeast'] 

Фактический результат:

['Lion', 'Tiger', 'Cat', 'DOG', None, 'Tulsi', 'Hibiscus', 'Aloe Vera', None, 'Yeast', None] 

почему никто не выходит добавляется в список ... нужна помощь:/

+1

'None' возвращается из' find_leaf() 'в' leaf_list.append (find_leaf()) ' – LittleQ

ответ

4

Ваш find_leaf() функция не всегда явно возвращает что-то. Когда функция просто заканчивается, возвращается None.

Функция вернет только что-то, если верно try_leaf is None. Когда это ложно, вы рекурсивно вызываете find_leaf(), но после этих рекурсивных вызовов вы ничего не возвращаете явно.

Вы можете явно проверить для этого случая:

for l in try_leaf: 
    leaf = find_leaf(l) 
    if leaf is not None: 
     leaf_list.append(leaf) 

или вместо перемещения, добавляя к leaf_list к другой ветви кода, вместо того, чтобы вернуться:

def find_leaf(node): 
    if node not in group_children: 
     leaf_list.append(node) 
    else: 
     for l in group_children[node]: 
      find_leaf(l) 
0

@Martin Питерс уже при условии ваш ответ просто небольшой аддон, если вы хотите использовать метод без добавления

код

group_children_map={'Mould': ['Yeast'], 'Living Organism': ['Animal', 'Plant', 'Mould'], 'Animal': ['Lion', 'Tiger', 'Cat', 'DOG'], 'Plant': ['Tulsi', 'Hibiscus', 'Aloe Vera']} 
print group_children_map 
node='Living Organism' 
leaf_list=[] 
def find_leaf(node): 
    try_leaf=group_children_map.get(node) 
    if try_leaf is None: 
     return node 
    else: 
     print try_leaf,"list" 
     for l in try_leaf: 
      print l, 
      leaf_list.extend(group_children_map[l]) #added the list where the dictionary keys matches 

find_leaf(node) 

print leaf_list