2016-06-17 3 views
0

Так что я эту функцию:iteritems только дает один ключ

cached_list = [] 
def build_dependency_list(list, tree, cache=True): 
    global cached_list 
    if not tree: 
     return 
    if cache: 
     cached_list = list 
    pp = pprint.PrettyPrinter(indent=4) 
    pprint.pprint(tree) 
    for key, value in tree.iteritems(): 
     pprint.pprint(key) 
     if key not in list: 
      list.append(key) 
     return build_dependency_list(list, value, cache) 

Но когда я пытаюсь запустить его с некоторыми dictionnary я получаю это

{'drawee': {'fbcore': {}, 'support-v4': {}}, 
'fbcore': {}, 
'imagepipeline': {'bolts-tasks': {'junit': {'hamcrest-core': {}}}, 
        'fbcore': {}, 
        'imagepipeline-base': {'bolts-tasks': {'junit': {'hamcrest-core': {}}}, 
              'fbcore': {}, 
              'library': {}, 
              'support-v4': {}}, 
        'library': {}, 
        'support-v4': {}}} 
'fbcore' 

Любая идея, почему fbcode является единственным быть итерацию?

+1

потому что функция возвращается после первой итерации – noteness

+1

Пожалуйста, не используйте имя 'list' как переменную в коде; вы маскируете встроенный тип. –

ответ

2

Вы вернуть из функции во время первой итерации:

for key, value in tree.iteritems(): 
    pprint.pprint(key) 
    if key not in list: 
     list.append(key) 
    return build_dependency_list(list, value, cache) 
    # ^^ part of the loop 

Таким образом, только производится первая пара ключ-значение, после чего вы RECURSE, и когда рекурсивный вызов завершается, цикл заканчивается.

+0

Небольшая и простая ошибка. Легко для других видеть, фиксируется через две минуты. Большое спасибо :) – Vinz243

Смежные вопросы