2017-06-07 1 views
0

Ceci est le document que j'ai actuellement dans MongoDB.itération récursive à travers le dictionnaire python de mongo

{ 
"name":"food", 
"core":{ 
    "group":{ 
     "carbs":{ 
      "abbreviation": "Cs" 
      "USA":{ 
       "breakfast":"potatoes", 
       "dinner":"pasta" 
      }, 
      "europe":{ 
       "breakfast":"something", 
       "dinner":"something big" 
      } 
     }, 
     "abbreviation": "Ds" 
     "dessert":{ 
      "USA":{ 
       "breakfast":"potatoes and eggs", 
       "dinner":"pasta" 
     }, 
     "europe":{ 
       "breakfast":"something small", 
       "dinner":"hello" 
     } 
    }, 
     "abbreviation": "Vs" 
     "veggies":{ 
         "USA":{ 
           "breakfast":"broccoli", 
           "dinner":"salad" 
         }, 
         "europe":{ 
           "breakfast":"cheese", 
           "dinner":"asparagus" 
         } 
       } 
      } 
     } 
} 

J'extraire les données de mongo avec les lignes de code suivantes.

data = collection.foodie.find({"name":"food"}, {"name":False, '_id':False}) 
def recursee(d): 
    for k, v in d.items(): 
     if isinstance(v,dict): 
      print recursee(d) 
     else: 
      print "{0} : {1}".format(k,v) 

Cependant, quand je lance la fonction recursee, il ne parvient pas à imprimer groupe: glucides, groupe: dessert, ou groupe: légumes. Au lieu de cela, je reçois la sortie ci-dessous. Est-ce que je saute quelque chose dans ma récurrence qui contourne l'impression du groupe et la valeur correspondante?

Répondre

1

De docs:

Les rendements des états return avec une valeur d'une fonction. return sans un argument d'expression renvoie None. La suppression de la fin d'une fonction renvoie également None.

Parce que votre recursee n'a pas de déclaration return, soit elle renvoie implicitement None, donc la prochaine déclaration

print recursee(d) 

exécute recursee avec d objet comme argument et imprime la sortie de fonction (qui est None)

Essayez

def recursee(d): 
    for k, v in d.items(): 
     if isinstance(v, dict): 
      print "{0} :".format(k) 
      recursee(d) 
     else: 
      print "{0} : {1}".format(k, v)