2016-06-17 11 views
0

geben So habe ich diese Funktion:iteritems nur einen Schlüssel

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) 

Aber wenn ich versuche, es mit etwas Dictionnary zu laufen bekomme ich diese

{'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' 

Jede Idee, warum fbcode die einzige ist, wobei iteriert?

+1

weil die Funktion nach der ersten Iteration zurückgegeben wird – noteness

+1

Bitte verwenden Sie nicht den Namen 'list' als Variable im Code; Sie maskieren den eingebauten Typ. –

Antwort

2

Sie aus der Funktion während der ersten Iteration zurückkehren :

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 

Also nur der erste Schlüssel-Wert-Paar erzeugt wird, nach dem Sie Rekursion, und wenn der rekursive Aufruf abgeschlossen ist, die Schleife endet dort.

+0

Kleiner und einfacher Fehler. Einfach für andere zu sehen, in zwei Minuten behoben. Danke vielmals :) – Vinz243

Verwandte Themen